Exemplo n.º 1
0
def jvm_analysis(log_file, log_level, warning_interval, sender_alias, receive,
                 subject):
    logger = log.Logger(log_file, log_level)
    db = database.db()

    logger.logger.debug("开始分析Jvm内存情况...")
    java_version = db.query_one("select version from tomcat_java_version")[0]
    table_name = f"tomcat_jstat{java_version}"

    sql = f"select port, ygc, ygct, fgc, fgct from {table_name} where record_time=(select max(record_time) from {table_name})"
    data = db.query_all(sql)

    ygc_warning_time = 1
    fgc_warning_time = 10
    #ygc_warning_time=0.01
    #fgc_warning_time=0

    for i in data:
        port = i[0]
        if i[1] == 0:
            ygc_time = 0
        else:
            ygc_time = i[2] / i[1]

        if i[3] == 0:
            fgc_time = 0
        else:
            fgc_time = i[4] / i[3]

        ygc_flag = 0
        if ygc_time >= ygc_warning_time:
            ygc_flag = 1
            logger.logger.warning(f"Tomcat({port})的YGC平均时间: {ygc_time}")
        warning_flag = warning.warning(logger, db, ygc_flag, port, "ygc",
                                       warning_interval)
        if warning_flag:
            warning_msg = f"Tomcat预警:\nTomcat({port})YGC平均时间为{ygc_time}\n"
            mail.send(logger,
                      warning_msg,
                      sender_alias,
                      receive,
                      subject,
                      msg=f'tomcat{port}_ygc')

        fgc_flag = 0
        if fgc_time >= fgc_warning_time:
            fgc_flag = 1
            logger.logger.warning(f"Tomcat({port})的FGC平均时间: {fgc_time}")
        warning_flag = warning.warning(logger, db, fgc_flag, port, "fgc",
                                       warning_interval)
        if warning_flag:
            warning_msg = f"Tomcat预警:\nTomcat({port})FGC平均时间为{fgc_time}\n"
            mail.send(logger,
                      warning_msg,
                      sender_alias,
                      receive,
                      subject,
                      msg=f'tomcat{port}_fgc')
Exemplo n.º 2
0
def analysis(log_file, log_level, warning_interval, sender_alias, receive,
             subject):
    logger = log.Logger(log_file, log_level)
    db = database.db()
    logger.logger.debug(f"分析用户的资源限制...")
    sql = "select user, nofile, nproc from users_limit where record_time=(select max(record_time) from users_limit)"
    data = db.query_all(sql)

    min_limit = 5000
    for i in data:
        flag = 0
        arg = "nofile"
        if i[1].isdigit():
            if int(i[1]) < min_limit:
                flag = 1
                cmd = f"echo '{i[0]} - {arg} 65536' >> /etc/security/limits.conf"
                warning_msg=f"用户资源限制预警:\n" \
                        f"用户({i[0]})的{arg}参数值({i[1]})过低.\n"\
                        f"请在root用户下执行命令: {cmd}, 然后重启登录该用户再重启该用户下相应软件"
        warning_flag = warning.warning(logger, db, flag, f"{i[0]}_limit", arg,
                                       warning_interval)
        if warning_flag:
            mail.send(logger,
                      warning_msg,
                      sender_alias,
                      receive,
                      subject,
                      msg=f"{i[0]}_limit nofile")

        flag = 0
        arg = "nproc"
        if i[2].isdigit():
            if int(i[2]) < min_limit:
                flag = 1
                cmd = f"echo '{i[0]} - {arg} 65536' >> /etc/security/limits.conf"
                warning_msg=f"用户资源限制预警:\n" \
                        f"用户({i[0]})的{arg}参数值({i[2]})过低.\n"\
                        f"请在root用户下执行命令: {cmd}, 然后重启登录该用户再重启该用户下相应软件"
            warning_flag = warning.warning(logger, db, flag,
                                           f"{i[0]}_nproc_limit", arg,
                                           warning_interval)
            if warning_flag:
                mail.send(logger,
                          warning_msg,
                          sender_alias,
                          receive,
                          subject,
                          msg=f"{i[0]}_limit nproc")
Exemplo n.º 3
0
def master_slave_analysis(log_file, log_level, seconds_behind_master,
                          warning_interval, sender_alias, receive, subject):
    logger = log.Logger(log_file, log_level)
    db = database.db()
    sql = "select role, slave_io_thread, slave_sql_thread, seconds_behind_master, slave_io_state, slave_sql_state from mysql_slave, mysql_role where mysql_role.record_time=mysql_slave.record_time"
    data = db.query_one(sql)
    conn_msg = "slave_conn"
    delay_msg = "slave_delay"
    if data is not None and data[0] == "slave":
        logger.logger.debug("开始分析MySQL主从信息")
        if data[1].lower() == data[2].lower() == "yes":
            conn_flag = 0
            delay_flag = 1 if data[3] >= seconds_behind_master else 0
        else:
            conn_flag = 1
            delay_flag = None

        for flag, msg in [(conn_flag, conn_msg), (delay_flag, delay_msg)]:
            if flag is not None:
                warning_flag = warning.warning(logger, db, flag, "mysql", msg,
                                               warning_interval)
                if warning_flag:
                    warning_msg="MySQL预警:\n"\
                            "MySQL主从连接:\n"\
                            f"Slave_IO_Running: {data[1]}\n"\
                            f"Slave_SQL_Running: {data[2]}\n"\
                            f"Slave_IO_State: {data[4]}\n"\
                            f"Slave_SQL_Running_State: {data[5]}\n"\
                            f"Seconds_Behind_Master: {data[3]}"
                    mail.send(logger,
                              warning_msg,
                              sender_alias,
                              receive,
                              subject,
                              msg=msg)
Exemplo n.º 4
0
def master_slave_analysis(log_file, log_level, warning_interval, sender_alias,
                          receive, subject):
    logger = log.Logger(log_file, log_level)
    db = database.db()
    sql = "select a.role, a.master_link_status, a.master_host from redis_slave as a,redis_role as b where a.record_time=b.record_time and a.role=b.role"
    data = db.query_one(sql)
    if data is not None:
        logger.logger.debug("开始分析Redis主从信息")
        if data[1] == "up" or data[1] == "online":
            flag = 0
        else:
            flag = 1
    else:
        flag = 0

    warning_flag = warning.warning(logger, db, flag, "redis", "slave",
                                   warning_interval)
    if warning_flag:
        warning_msg = f"Redis预警:\nRedis slave无法连接master({data[2]})\n"
        mail.send(logger,
                  warning_msg,
                  sender_alias,
                  receive,
                  subject,
                  msg=f'redis_slave')
Exemplo n.º 5
0
def running_analysis(log_file, log_level, warning_interval, sender_alias,
                     receive, subject):
    logger = log.Logger(log_file, log_level)
    logger.logger.debug("开始分析Tomcat运行情况...")
    db = database.db()
    """
    sql="select record_time, port, pid from tomcat_constant where (port,record_time) in (select port,max(record_time) from tomcat_constant group by port)"
    sqlite3低版本不支持多列in查询, 无语... 
    """
    sql = "select port, pid from tomcat_constant where record_time=(select max(record_time) from tomcat_constant)"
    data = db.query_all(sql)
    for i in data:
        flag = 0
        if i[1] == 0:
            flag = 1
        warning_flag = warning.warning(logger, db, flag, i[0], "running",
                                       warning_interval)
        if warning_flag:
            warning_msg = f"Tomcat预警:\nTomcat({i[0]})未运行\n"
            mail.send(logger,
                      warning_msg,
                      sender_alias,
                      receive,
                      subject,
                      msg=f'tomcat{i[0]}_running')
Exemplo n.º 6
0
def running_analysis(log_file, log_level, warning_interval, notify_dict):
    logger=log.Logger(log_file, log_level)
    logger.logger.debug("开始分析Redis运行情况...")
    db=database.db()
    sql="select port, pid from redis_constant where record_time=(select max(record_time) from redis_constant)"
    port, pid=db.query_one(sql)
    flag= 1 if pid==0 else 0        # 是否预警
    warning_flag=warning.warning(logger, db, flag, "redis", "running", warning_interval)
    if warning_flag:
        warning_msg=f"Redis预警:\nRedis({port})未运行"
        notification.send(logger, warning_msg, notify_dict, msg=f'redis_running')
Exemplo n.º 7
0
def memory_analysis(log_file, log_level, warning_percent, warning_interval, notify_dict):
    logger=log.Logger(log_file, log_level)
    db=database.db()
    sql="select record_time, used_percent from memory order by record_time desc"
    data=db.query_one(sql)
    mem_used_percent=float(data[1])

    logger.logger.debug("分析Mem...")
    flag=0                 # 是否有预警信息
    if mem_used_percent > warning_percent:
        flag=1
        logger.logger.warning(f"内存当前使用率当前已达到{mem_used_percent}%")
    warning_flag=warning.warning(logger, db, flag, "mem", "used_percent", warning_interval)
    if warning_flag:
        warning_msg=f"内存预警:\n内存当前使用率当前已达到{mem_used_percent}%"
        notification.send(logger, warning_msg, notify_dict, msg='mem_used_percent')
Exemplo n.º 8
0
def disk_analysis(log_file, log_level, warning_percent, warning_interval, notify_dict):
    logger=log.Logger(log_file, log_level)
    db=database.db()
    sql=f"select record_time, name, used_percent, mounted from disk where record_time=(select max(record_time) from disk)"
    data=db.query_all(sql)

    logger.logger.debug("分析disk...")
    for i in data:
        flag=0                 # 是否有预警信息
        if i[2] >= warning_percent:
            flag=1
            logger.logger.warning(f"{i[3]}目录({i[1]})已使用{i[2]}%")
        warning_flag=warning.warning(logger, db, flag, "disk", i[3], warning_interval)
        if warning_flag:
            warning_msg=f"磁盘预警:\n{i[3]}目录({i[1]})已使用{i[2]}%\n"
            notification.send(logger, warning_msg, notify_dict, msg=i[3])
Exemplo n.º 9
0
def cpu_analysis(log_file, log_level, warning_percent, warning_interval, notify_dict):
    logger=log.Logger(log_file, log_level)
    db=database.db()
    sql="select record_time, cpu_used_percent from cpu order by record_time desc"
    data=db.query_one(sql)
    cpu_used_percent=float(data[1])

    logger.logger.debug("分析CPU...")
    flag=0                 # 是否有预警信息
    if cpu_used_percent >= warning_percent:
        flag=1
        logger.logger.warning(f"CPU当前使用率已达到{cpu_used_percent}%")

    warning_flag=warning.warning(logger, db, flag, "cpu", "used_percent", warning_interval)
    if warning_flag:
        warning_msg=f"CPU预警:\nCPU使用率当前已达到{cpu_used_percent}%"
        notification.send(logger, warning_msg, notify_dict, msg='cpu_used_percent')
Exemplo n.º 10
0
def running_analysis(log_file, log_level, warning_interval, sender_alias,
                     receive, subject):
    logger = log.Logger(log_file, log_level)
    logger.logger.debug("开始分析MySQL运行情况...")
    db = database.db()
    sql = "select port, pid from mysql_constant where record_time=(select max(record_time) from mysql_constant)"
    port, pid = db.query_one(sql)
    flag = 1 if pid == 0 else 0  # 是否预警
    warning_flag = warning.warning(logger, db, flag, "mysql", "running",
                                   warning_interval)
    if warning_flag:
        warning_msg = f"MySQL预警:\nMySQL({port})未运行"
        mail.send(logger,
                  warning_msg,
                  sender_alias,
                  receive,
                  subject,
                  msg=f'mysql_running')
Exemplo n.º 11
0
def tablespace_analysis(log_file, log_level, warning_percent, warning_interval,
                        notify_dict):
    logger = log.Logger(log_file, log_level)
    db = database.db()
    sql = f"select tablespace_name, used_percent from oracle where record_time=(select max(record_time) from oracle)"
    data = db.query_all(sql)

    logger.logger.debug("分析表空间...")
    for i in data:
        flag = 0  # 是否有预警信息
        if i[1] >= warning_percent:
            flag = 1
            logger.logger.warning(f"{i[0]}表空间已使用{i[1]}%")
        warning_flag = warning.warning(logger, db, flag, "oracle", i[0],
                                       warning_interval)
        if warning_flag:
            warning_msg = f"Oracle表空间预警:\n{i[0]}表空间已使用{i[1]}%"
            notification.send(logger, warning_msg, notify_dict, msg=i[0])
Exemplo n.º 12
0
def analysis(log_file, log_level, directory, warning_interval, notify_dict):
    """对备份文件进行预警
    1. 备份目录不存在则提示
    2. 当天的备份文件未生成则提示
    3. 当天的备份文件小于上一个的大小的99%则提示
    """
    logger = log.Logger(log_file, log_level)
    db = database.db()
    logger.logger.info(f"分析备份目录{directory}文件...")
    sql = "select record_time, directory, filename, size, ctime from backup where directory=? order by record_time, ctime desc limit 2"
    data = db.query_all(sql, (directory, ))
    now_time = datetime.datetime.now().strftime("%Y-%m-%d")

    flag = 0  # 是否有预警信息
    value = None
    if len(data) < 2:
        if data[0][2] is None:
            flag = 1
            value = "dir_is_None"
            warning_msg = f"备份预警:\n备份目录({directory})不存在"
        else:
            if now_time not in data[0][4]:
                flag = 1
                warning_msg = f"备份预警:\n备份目录({directory})当天备份文件未生成"
                value = "file_is_None"
    else:
        if now_time not in data[0][4]:
            flag = 1
            warning_msg = f"备份预警:\n备份目录({directory})当天备份文件未生成"
            value = "file_is_None"
        elif data[0][3] < data[1][3] * 0.99:
            flag = 1
            warning_msg = f"备份预警:\n备份目录({directory})当天备份文件({format_size(data[0][3])})与上一次({format_size(data[1][3])})相比相差较大"
            value = "file_is_small"

    warning_flag = warning.warning(logger, db, flag, f"backup {directory}",
                                   value, warning_interval)
    if warning_flag:
        notification.send(logger,
                          warning_msg,
                          notify_dict,
                          msg=f"{directory} {value}")
Exemplo n.º 13
0
    def on_text_message(self, data):
        data = data['o']['chatMessage']
        user_id = data['author']['uid']
        user_reputation = data['author']['reputation']
        user_nickname = data['author']['nickname']
        user_level = data['author']['level']
        thread_id = data['threadId']
        message_text = data['content']
        #Если смс от бота, он не реагирует.
        if user_id == self.client.uid:
            return False
        if user_nickname == "Линчеватель":
            user_nickname = "Лянча"
        if user_nickname == "denvin":
            user_nickname = "Скунс"
        ob = Obscene()

        for i in self.selected_chats:
            #log(message_text)
            #атюки
            #if  self.private_chat_for_spam == False and i.uid == thread_id:
            #self.private_chat_for_spam == True
            #self.auto_sms(i)
            if i.uid == thread_id and (
                    message_text.lower()).find('цаца шлюха') != -1:
                log(str(datetime.datetime.now()) + " Функция - цаца шлюха")
                i.send_text_message(user_nickname +
                                    ", мамку твою раком трахала)")
                return True
            if i.uid == thread_id and (
                    message_text.lower()).find('цаца стерва') != -1:
                log(str(datetime.datetime.now()) + " Функция - цаца стерва")
                i.send_text_message(user_nickname +
                                    ", в сраку твого батю перла,)")
                return True
            if i.uid == thread_id and (
                    message_text.lower()).find('цаца салам') != -1:
                log(str(datetime.datetime.now()) + " Функция - цаца салам")
                i.send_text_message(user_nickname + ", аллейкум салам")
                return True
            if i.uid == thread_id and (message_text.lower(
            )).find('цаца привет') != -1 or (
                    message_text.lower()).find('цаца ку') != -1 or (
                        message_text.lower()).find('цаца здравствуй') != -1:
                log(str(datetime.datetime.now()) + " Функция - цаца привет")
                i.send_text_message(user_nickname + ", салам")
                return True
            if i.uid == thread_id and not ob.is_clear(message_text):
                user_warnings = warning.warning(user_id)
                log(f"Пользователь {user_nickname} ({user_warnings}) нарушает правила сообщества в чате {i.title}."
                    )
                i.send_text_message(
                    self.warning_text.replace('{name}', user_nickname).replace(
                        '{warnings}', str(user_warnings)))
                return True
            if i.uid == thread_id and (
                (message_text.lower()).find('линч это копенгаген') != -1 or
                (message_text.lower()).find('линч це копенгаген') != -1 or
                (message_text.lower()).find('линчеватель це копенгаген') != -1
                    or
                (message_text.lower()).find('линчеватель это копенгаген') != -1
            ):
                log(str(datetime.datetime.now()) + " Функция - линч это")
                i.send_text_message(user_nickname + ", максимум Дублин")
                return True
            if i.uid == thread_id and (
                (message_text.lower()).find('линч это дублин') != -1 or
                (message_text.lower()).find('линч це дублин') != -1 or
                (message_text.lower()).find('линчеватель це дублин') != -1 or
                (message_text.lower()).find('линчеватель это дублин') != -1):
                log(str(datetime.datetime.now()) + " Функция - линч это")
                i.send_text_message(user_nickname + ", максимум Харьков")
                return True
            if i.uid == thread_id and (
                (message_text.lower()).find('линч это харьков') != -1 or
                (message_text.lower()).find('линч це харьков') != -1 or
                (message_text.lower()).find('линчеватель це харьков') != -1 or
                (message_text.lower()).find('линчеватель это харьков') != -1):
                log(str(datetime.datetime.now()) + " Функция - линч это")
                i.send_text_message(user_nickname + ", да, одноветочный.")
                return True
            if i.uid == thread_id and (
                    message_text.lower()).find('люда з села') != -1 or (
                        message_text.lower()).find('люда з сила') != -1:
                log(str(datetime.datetime.now()) + " Функция - люда з села")
                i.send_text_message(user_nickname +
                                    ", ага, із забитого нахуй.")
                return True
            if i.uid == thread_id and (
                    message_text.lower()).find('стелла собака') != -1:
                log(str(datetime.datetime.now()) + " Функция - стелла собака")
                i.send_text_message(user_nickname + ", вроді гавкає.")
                return True
            if i.uid == thread_id and (
                    message_text.lower()).find('кусь токсик') != -1:
                log(str(datetime.datetime.now()) + " Функция - кусь токсик")
                i.send_text_message(user_nickname +
                                    ", кто такой єтот ваш кусь?")
                return True
            if i.uid == thread_id and (
                    message_text.lower()).find('го гс') != -1:
                log(str(datetime.datetime.now()) + " Функция - го гс")
                i.send_text_message(
                    user_nickname +
                    ", опять по бл**ям? Ви ж старі як дінозаври..")
                return True
            if i.uid == thread_id and (
                    message_text.lower()).find('кпоп норм') != -1:
                log(str(datetime.datetime.now()) + " Функция - кпоп норм")
                i.send_text_message(user_nickname + ", а твоє єбало нє норм")
                return True
            if i.uid == thread_id and (
                    message_text.lower()).find('цаца крутая') != -1 or (
                        message_text.lower()).find('цаца классная') != -1 or (
                            message_text.lower()).find('цаца хорошая') != -1:
                log(str(datetime.datetime.now()) + " Функция - цаца крутая")
                i.send_text_message(user_nickname + ", спасибо, а ты секс :3")
                return True
            if i.uid == thread_id and (
                    message_text.lower()).find('цаца бот') != -1 or (
                        message_text.lower()).find('цаца робот') != -1 or (
                            message_text.lower()).find('цаца компютер') != -1:
                log(str(datetime.datetime.now()) + " Функция - цаца бот")
                i.send_text_message(user_nickname +
                                    ", я думала ти мені друг((")
                return True
            if i.uid == thread_id and (
                (message_text.lower()).find('рома бандера') != -1 or
                (message_text.lower()).find('рома укроп') != -1 or
                (message_text.lower()).find('рома хохол') != -1):
                log(str(datetime.datetime.now()) + " Функция - рома бандера")
                i.send_text_message(user_nickname + ", Рома бог, а ти сосеш.")
                return True
            if i.uid == thread_id and (message_text.lower()).find(
                    'давно тебя не было в уличных гонках') != -1:
                log(str(datetime.datetime.now()) + " Функция - уличные гонки")
                i.send_text_message(user_nickname +
                                    ", так пизданула наче Іван Солярка.")
                return True
            if i.uid == thread_id and (
                    message_text.lower()).find('хохлушка') != -1:
                log(str(datetime.datetime.now()) + " Функция - хохлушка")
                i.send_text_message(user_nickname + ", не хохлушка а багіня.")
                return True
            if i.uid == thread_id and (
                    message_text.lower()).find('вы все зёпы') != -1:
                log(str(datetime.datetime.now()) + " Функция - Вы все зёпы")
                i.send_text_message(user_nickname +
                                    ", посмокчи мою чорну єлду.")
                return True
            if i.uid == thread_id and (
                    message_text.lower()).find('рома алкаш') != -1:
                log(str(datetime.datetime.now()) + " Функция - рома алкаш")
                i.send_text_message(user_nickname +
                                    ", Рома професійний соміль'є.")
                return True
            if i.uid == thread_id and (
                    message_text.lower()).find('пососеш') != -1:
                log(str(datetime.datetime.now()) + " Функция - пососеш")
                i.send_text_message(user_nickname + ", хто я?)))0)0")
                return True
            if i.uid == thread_id and (
                    message_text.lower()).find('цаца ролл') == 0:
                random.seed()
                rand = random.randint(0, 100)
                log(
                    str(datetime.datetime.now()) + " Функция - цаца ролл: " +
                    str(rand))
                i.send_text_message(user_nickname +
                                    ", твоё случайное число: " + str(rand))
                return True
            if i.uid == thread_id and (
                    message_text.lower()).find('цаца ду ') == 0:
                #rand = random.randint(0,100)
                text_plus = message_text[8:len(message_text)]
                if random.randint(0, 100) > 49:
                    log(
                        str(datetime.datetime.now()) +
                        " Функция - цаца ду: успешно")
                    i.send_text_message("[I]" + text_plus + "[Успешно]")
                else:
                    log(
                        str(datetime.datetime.now()) +
                        " Функция - цаца ду: неуспешно")
                    i.send_text_message("[I]" + text_plus + "[Неуспешно]")
                return True
            if i.uid == thread_id and (
                    message_text.lower()).find('цаца дия ') == 0:
                #rand = random.randint(0,100)
                text_plus = message_text[9:len(message_text)]
                if random.randint(0, 100) > 49:
                    log(
                        str(datetime.datetime.now()) +
                        " Функция - цаца дия: успешно")
                    i.send_text_message("[I]" + user_nickname + " " +
                                        text_plus + "[Успешно]")
                else:
                    log(
                        str(datetime.datetime.now()) +
                        " Функция - цаца дия: неуспешно")
                    i.send_text_message("[I]" + user_nickname + " " +
                                        text_plus + "[Неуспешно]")
                return True
            if i.uid == thread_id and (
                    message_text.lower()).find('цаца ты кто') != -1:
                log(str(datetime.datetime.now()) + " Функция - цаца ты кто")
                i.send_text_message(
                    user_nickname +
                    ", я тебе ничего не расскажу, а вдруг ты нацик?")
                return True
            if i.uid == thread_id and (message_text.lower()).find('цаца') == 0:
                log(str(datetime.datetime.now()) + " Функция - цаца")
                i.send_text_message(
                    user_nickname +
                    ", не трогай мене, животне вонюче. Я вам не нанімалась -_-"
                )
                return True
            if i.uid == thread_id and (
                    message_text.lower()).find('стелла це машка') != -1:
                log(
                    str(datetime.datetime.now()) +
                    " Функция - стелла це машка")
                i.send_text_message(
                    user_nickname +
                    ", Абсолютно с тобой сагласна, гдє подпісивать?")
                return True