首页 > 系统相关 >zabbix自定义监控进程和日志

zabbix自定义监控进程和日志

时间:2022-09-06 22:11:27浏览次数:77  
标签:httpd log 自定义 etc zabbix 136 日志 root

zabbix自定义监控进程和日志

目录

自定义监控进程

配置监控脚本

给客户端dnf安装httpd服务,并启动服务

[root@136 ~]# dnf -y install httpd
[root@136 ~]# systemctl start httpd

创建脚本存放目录,并编辑脚本

[root@136 ~]# mkdir /etc/scripts
[root@136 ~]# cd /etc/scripts/
[root@136 scripts]# vim check_process.sh
#!/bin/bash
count=$(ps -ef |grep -Ev "grep|$0"|grep  $1|wc -l) 
if [ $count -eq 0  ];then
  echo 0
else
  echo 1
fi
[root@136 scripts]# chmod +x check_process.sh

配置zabbix_agentd文件

[root@136 ~]# cd /usr/local/etc/
[root@136 etc]# ls
zabbix_agentd.conf  zabbix_agentd.conf.d
[root@136 etc]# vim zabbix_agentd.conf
...
UnsafeUserParameters=1
UserParameter=check_process[*],/bin/bash /etc/scripts/check_process.sh $1

#更改配置文件后重启zabbix服务
[root@136 etc]# pkill zabbix    
[root@136 etc]# zabbix_agentd 

(服务端)检测一下check_process能否使用

[root@zabbix ~]# zabbix_get -s 192.168.118.136 -k check_process[httpd]
0
#客户端httpd服务正常运行中,所以显示为0
[root@zabbix ~]# zabbix_get -s 192.168.118.136 -k check_process[mysql]
1
#客户端没有安装mysql服务,所以显示为1

添加监控项

image

image

image

查看监控数据

image

添加触发器

image

image

image

手动关闭httpd服务,触发报警

[root@136 ~]# systemctl stop httpd

发生报错

image

发送了报错邮件

image

查看邮件,下载文件查看报错信息

image

自定义监控日志

服务端和客户端操作

编写脚本

这里用到python脚本,所有需要安装python环境

[root@136 ~]# dnf -y install python36

由于我们是初学者

脚本内容直接借鉴忘情公子提供的log脚本日志

[root@136 ~]# cd /etc/scripts/
[root@136 scripts]# vim 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@136 scripts]# chmod +x log.py 
[root@136 scripts]# ls
check_process.sh  log.py

修改httpd日志目录权限

[root@136 ~]# chmod 755 /var/log/httpd/

修改配置文件,重启服务

[root@136 httpd]# cd /usr/local/etc/
[root@136 etc]# ls
zabbix_agentd.conf  zabbix_agentd.conf.d
[root@136 etc]# vim zabbix_agentd.conf
...
UserParameter=check_logs[*],/etc/scripts/log.py $1 $2 $3
#直接在最后一行加入此内容

#重启服务
[root@136 etc]# pkill zabbix
[root@136 etc]# zabbix_agentd 

服务端测试

#先删除(客户机)上的logseek文件,原logseek文件是属于root用户,zabbix没有权限访问,删除后去服务端运行测试命令会生成一个属于zabbix用户的logseek文件。
[root@136 etc]# rm -f /tmp/logseek 

#再去服务端进行测试
[root@zabbix ~]# zabbix_get -s 192.168.118.136 -k check_logs['/var/log/httpd/error_log']
1
[root@zabbix ~]# zabbix_get -s 192.168.118.136 -k check_logs['/var/log/httpd/error_log']
0

添加监控项

image

image

image

添加触发器

image

image

image

手动触发警告,查看警告

[root@136 etc]# cd /var/log/httpd/
[root@136 httpd]# ls
access_log  error_log
[root@136 httpd]# echo 'Error' >> error_log

image

image

标签:httpd,log,自定义,etc,zabbix,136,日志,root
From: https://www.cnblogs.com/Clannaddada/p/16663505.html

相关文章

  • Flask 学习-54.Flask-RESTX 结合 namespace 使用 logging日志
    前言Flask-RESTX通过提供每个和它自己的标准Python实例来扩展Flask的日志记录。这允许在每个命名空间的基础上分离日志记录,以允许更细粒度的细节和配置。基本示例默......
  • python fastapi + uvicorn 记录日志的最佳实践,结合nb_log
      pythonfastapi+uvicorn记录日志的最佳实践,要记录对fastapi什么时候请求了什么url和入参,只需要记录uvicorn命名空间的日志就可以了。文章使用nb_log五彩日志来......
  • 07-Nginx日志切割-通过sh脚本手动切割日志
    Nginx日志切割现有的日志都会存在access.log文件中,但是随着时间的推移,这个文件的内容会越来越多,体积会越来越大,不便于运维人员查看,所以我们可以通过把文件切割为多份不同......
  • 【uni-app】自定义导航栏/标题栏
    什么是自定义导航栏默认导航栏或原生导航栏是啥样的,你懂的。但,我想给导航栏加个背景图,比如这样: 这时候就需要自定义导航栏。自定义导航栏自定义导航栏的中心思想是: ......
  • 08-Nginx日志切割-脚本+定时任务自动切割日志
    定时任务执行脚本,解决手动问题安装依赖yuminstallcrontabs添加定时任务crontab-e输入内容*/1****/usr/local/nginx/sbin/cut_my_log.sh修改完成后......
  • mysql 日志文件配置
     https://blog.csdn.net/a510196774/article/details/101995194 [mysqld]datadir=/var/lib/mysqlsocket=/var/lib/mysql/mysql.socklog-error=/var/log/mysql/mysqld......
  • client-go开发自定义operator
    开发operator一共分为5步骤一、创建configconfig的创建有两种方式1、clientcmd.BuildConfigFromFlagsconfig,err:=clientcmd.BuildConfigFromFlags("",clientcmd.......
  • idea自动生成实体类,自动添加注释,自定义实体类
    之前写过一篇博客记录了idea编译器怎么快速生成实体类,但是发现没有自动添加注释,如果字段比较多的话,看着很不友好:https://www.cnblogs.com/lyd447113735/p/14924011.html所......
  • 跨线程(线程池)日志链路追踪
    不跨线程的业务日志链路我们可以通过日志框架如Logback 使用MDC对象放入一个traceId,再在日志配置文件配置即可但如跨线程的话traceid无法传递(MDC底层使用的TreadLoca......
  • 组件的自定义事件和原生事件、组件的嵌套
    原生事件在原生组件(就是html标签)中事件是由系统来设计触发条件的:<div@click="fn">点我</div> 自定义事件在自定义组件中,事件是由自己来设计什么时候触发的......