自定义监控mysql进程以及日志

2022/7/12 2:21:31

本文主要是介绍自定义监控mysql进程以及日志,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

客户端操作开启自定义监控

[root@zabbix-agent ~]# cd /usr/local/etc/
[root@zabbix-agent etc]# ls
zabbix_agentd.conf    zabbix_server.conf
zabbix_agentd.conf.d  zabbix_server.conf.d
[root@zabbix-agent etc]# vi zabbix_agentd.conf
# Mandatory: no
# Range: 0-1
# Default:
UnsafeUserParameters=1   #此处取消注释修改值为1

UserParameter=check_process[*],/bin/bash /scropts/check_process.sh $1  #加到文章最底部。
[root@zabbix-agent etc]# mkdir /scropts/ #创建一个目录
[root@zabbix-agent etc]# cd /scropts/
[root@zabbix-agent scropts]# vim check_process.sh  #写一个脚本

#!/bin/bash

count=$(ps -ef | grep -Ev "grep|$0" | grep -c $1) #过滤脚本自身
if  [ $count -eq 0 ];then   #当count等于0时打印1,
     echo '1'
else
     echo '0'  #没有问题打印0
fi
[root@zabbix-agent scropts]# chmod +x check_process.sh  #增加自行权限
[root@zabbix-agent scropts]# ll
总用量 4
-rwxr-xr-x 1 root root 125 7月  10 23:15 check_process.sh
[root@zabbix-agent scropts]# pkill zabbix  #杀进程
[root@zabbix-agent scropts]# zabbix_agentd
[root@zabbix-agent scropts]# systemctl start mariadb.service #启动数据库
[root@zabbix-agent scropts]# ss -antl  #有端口号了
State  Recv-Q  Send-Q   Local Address:Port    Peer Address:PortProcess
LISTEN 0       128            0.0.0.0:10050        0.0.0.0:*
LISTEN 0       80             0.0.0.0:3306         0.0.0.0:*
LISTEN 0       128            0.0.0.0:22           0.0.0.0:*
LISTEN 0       128               [::]:22              [::]:*

测试服务端

root@zabbix-server ~]# zabbix_get -s 192.168.6.132 -k check_process[mysqld]
0
[root@zabbix-server ~]# zabbix_get -s 192.168.6.132 -k check_process[zabbix]
0
[root@zabbix-agent scropts]# systemctl stop mariadb.service
[root@zabbix-agent scropts]# ss -atnl
State  Recv-Q  Send-Q   Local Address:Port    Peer Address:PortProcess
LISTEN 0       128            0.0.0.0:10050        0.0.0.0:*
LISTEN 0       128            0.0.0.0:22           0.0.0.0:*
LISTEN 0       128               [::]:22              [::]:*

 

   添加监控项,保存,更新。

 

 添加触发器

 

 取到值了,

[root@zabbix-agent scropts]# systemctl stop mariadb.service  # 停掉服务测试
[root@zabbix-agent scropts]# ss -antl
State  Recv-Q  Send-Q   Local Address:Port    Peer Address:PortProcess
LISTEN 0       128            0.0.0.0:10050        0.0.0.0:*
LISTEN 0       128            0.0.0.0:22           0.0.0.0:*
LISTEN 0       128               [::]:22              [::]:*

 

 

 收到邮件!

自定义监控日志

[root@zabbix-agent scropts]# vi log.py
[root@zabbix-agent scropts]# cat log.py
#!/usr/bin/env python3
import sys
import re

def prePos(seekfile):
    global curpos
    try:
        cf = open(seekfile)
    except IOError:
        curpos = 0
        return curpos
    except FileNotFoundError:
        curpos = 0
        return curpos
    else:
        try:
            curpos = int(cf.readline().strip())
        except ValueError:
            curpos = 0
            cf.close()
            return curpos
        cf.close()
    return curpos

def lastPos(filename):
    with open(filename) as lfile:
        if lfile.readline():
            lfile.seek(0,2)
        else:
            return 0
        lastPos = lfile.tell()
    return lastPos

def getSeekFile():
    try:
        seekfile = sys.argv[2]
    except IndexError:
        seekfile = '/tmp/logseek'
    return seekfile

def getKey():
    try:
        tagKey = str(sys.argv[3])
    except IndexError:
        tagKey = 'Error'
    return tagKey

def getResult(filename,seekfile,tagkey):
    destPos = prePos(seekfile)
    curPos = lastPos(filename)

    if curPos < destPos:
        curpos = 0

    try:
        f = open(filename)
    except IOError:
        print('Could not open file: %s' % filename)
    except FileNotFoundError:
        print('Could not open file: %s' % filename)
    else:
        f.seek(destPos)

        while curPos != 0 and f.tell() < curPos:
            rresult = f.readline().strip()
            global result
            if re.search(tagkey, rresult):
                result = 1
                break
            else:
                result = 0

        with open(seekfile,'w') as sf:
            sf.write(str(curPos))
    finally:
        f.close()
    return result

if __name__ == "__main__":
    result = 0
    curpos = 0
    tagkey = getKey()
    seekfile = getSeekFile()
    result = getResult(sys.argv[1],seekfile,tagkey)
    print(result)
[root@zabbix-agent scropts]# ls
check_process.sh  log.py
[root@zabbix-agent scropts]# chmod +x log.py  #添加权限
[root@zabbix-agent scropts]# ll
总用量 8
-rwxr-xr-x 1 root root  125 7月  10 23:15 check_process.sh
-rwxr-xr-x 1 root root 1854 7月  11 00:13 log.py
[root@zabbix-agent scropts]# setfacl -m u:zabbix:rx /var/log/mariadb/mariadb.log   # 让zabbix用户对这个日志有读和执行的权限
[root@zabbix-agent scropts]# ll /var/log/mariadb/
总用量 8
-rw-rwx---+ 1 mysql mysql 6983 7月  11 00:03 mariadb.log
[root@zabbix-agent scropts]# getfacl /var/log/mariadb/mariadb.log  # 查看
getfacl: Removing leading '/' from absolute path names
# file: var/log/mariadb/mariadb.log
# owner: mysql
# group: mysql
user::rw-
user:zabbix:r-x
group::rw-
mask::rwx
other::---

测试脚本

[root@zabbix-agent scropts]# yum -y install python3
[root@zabbix-agent scropts]# python3 log.py /var/log/mariadb/mariadb.log
0
[root@zabbix-agent scropts]# echo 'Error' >> /var/log/mariadb/mariadb.log
[root@zabbix-agent scropts]# python3 log.py /var/log/mariadb/mariadb.log
1
[root@zabbix-agent scropts]# cat /tmp/logseek
6989[root@zabbix-agent scropts]# echo 'Error' >> /var/log/mariadriadb.log
[root@zabbix-agent scropts]# python3 log.py /var/log/mariadb/mariadb.log
1
[root@zabbix-agent scropts]# cat /tmp/logseek
6995[root@zabbix-agent scropts]#
[root@zabbix-agent scropts]# rm -rf /tmp/logseek
# 测试脚本。

配置zabbix_agentd.conf文件

[root@zabbix-agent scropts]# vi /usr/local/etc/zabbix_agentd.conf

UserParameter=check_logs[*],/usr/bin/python3 /scropts/log.py $1$2 $3   #添加到最后
[root@zabbix-agent scropts]# pkill zabbix  # 啥进程
[root@zabbix-agent scropts]# zabbix_agentd
[root@zabbix-agent scropts]# systemctl start mariadb
[root@zabbix-agent scropts]# ss -antl
State  Recv-Q  Send-Q   Local Address:Port    Peer Address:PortProcess
LISTEN 0       128            0.0.0.0:10050        0.0.0.0:*
LISTEN 0       80             0.0.0.0:3306         0.0.0.0:*
LISTEN 0       128            0.0.0.0:22           0.0.0.0:*
LISTEN 0       128               [::]:22              [::]:*

手动添加监控项

 

 添加触发器

 

 手动促发测试

 



这篇关于自定义监控mysql进程以及日志的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程