zabbix监控进程,日志,主从状态和主从延迟

news2024/12/23 23:39:09

自定义监控进程

使用httpd服务为例,监控httpd的进程

在zabbix-agent上安装httpd

yum -y install httpd

重启httpd

systemctl restart httpd

systemtctl enable httpd

查看httpd的进程

[root@zabbix-agent ~]# ps -ef | grep httpd
root     2407458       1  0 16:56 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
apache   2407459 2407458  0 16:56 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
apache   2407460 2407458  0 16:56 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
apache   2407461 2407458  0 16:56 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
apache   2407462 2407458  0 16:56 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
root     2424256  749323  0 17:02 pts/2    00:00:00 grep --color=auto httpd
[root@zabbix-agent ~]#  ps -ef | grep httpd | grep -v grep | wc -l
5
[root@zabbix-agent ~]# ps -ef | grep -v grep | grep -c httpd
5
[root@zabbix-agent ~]# 

 新建脚本存放目录

[root@zabbix-agent ~]# mkdir /etc/zabbix/script
[root@zabbix-agent ~]# cd /etc/zabbix/script/
[root@zabbix-agent script]# vim check_httpd.sh        //新建脚本//
[root@zabbix-agent script]# cat check_httpd.sh 
count=$(ps -ef | grep -Ev "grep|$0" | grep -c httpd)
if [ $count -eq 0 ];then
        echo '1'
else
        echo '0'
fi

设置属主,权限

chmod +x check_httpd.sh

chown -R zabbix.zabbix /etc/zabbix/script/

 测试脚本

0是httpd服务开启,1为关闭

[root@zabbix-agent script]# ./check_httpd.sh 
0
[root@zabbix-agent script]# systemctl stop httpd        //此时停止httpd服务
[root@zabbix-agent script]# ./check_httpd.sh             // 脚本测试出来是1
1
[root@zabbix-agent script]# 

关闭后记得启动httpd服务

修改zabbix-agentd.conf文件

vim /etc/zabbix/zabbix_agentd.conf

添加:
UserParameter=check_httpd,/bin/bash /etc/zabbix/script/check_httpd.sh

重启服务

systemctl restart zabbix-agent

 zabbix server端测试脚本

[root@zabbix-server ~]# zabbix_get -s 192.168.100.30 -k check_httpd
0
[root@zabbix-server ~]# 
//0代表httpd服务已启动/

zabbix web平台配置

新建监控项

配置触发器

 测试

关闭httpd服务,测试告警信息
[root@zabbix-agent script]# systemctl stop httpd

 此时查看告警信息和邮箱

邮箱

 开启httpd服务,查看邮箱是否收到恢复邮件

[root@zabbix-agent ~]# systemctl restart zabbix-agent.service

查看邮箱

自定义监控日志

下载log.py来协助我们进行测试,以httpd服务为例

将log.py上传到/etc/zabbix/script/目录下,然后给执行权限,修改所有者和所属组为zabbix

# log.py

    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)
#!/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)

### 作用:检查日志文件中是否有指定的关键字

#### 第一个参数为日志文件名(必须有,相对路径、绝对路径均可)

#### 第二个参数为seek position文件的路径(可选项,若不设置则默认为/tmp/logseek文件。相对路径、绝对路径均可)

#### 第三个参数为搜索关键字,默认为 Error

 设置属主和权限

chmod +x log.py

chown zabbix.zabbix log.py

httpd服务的日志文件在/var/log/httpd/目录下,首先我们需要给这个目录设置一个ACL权限,让zabbix用户有权限去访问该目录 

[root@zabbix-agent httpd]# setfacl -m u:zabbix:r-x /var/log/httpd/

下载python3来执行log.py脚本

[root@zabbix-agent ~]# yum -y install python3

修改zabbix_agentd.conf文件,并重启服务

vim /etc/zabbix/zabbix_agentd.conf

 UserParameter=check_httpd,/bin/bash /etc/zabbix/script/check_httpd.sh
 UserParameter=check_logs[*],/usr/bin/python3 /etc/zabbix/script/log.py $1 $2 $3

重启zabbix-agent服务

systemctl restart zabbix-agent.service

 测试脚本

[root@zabbix-agent script]#  python3 log.py /var/log/httpd/error_log 
0
[root@zabbix-agent script]# echo 'Error'>> /var/log/httpd/error_log
/ 追加重定向一个Error到日志文件中做实验

[root@zabbix-agent script]#  python3 log.py /var/log/httpd/error_log 
1
[root@zabbix-agent script]# 
/ 0为没有Error日志信息,1为有Error日志信息///

测试完成后将写入的Error内容删除

而且因文件/tmp/logseek属于root账户,在web端写入写不进去,所以删除

rm -rf /tmp/logseek

配置监控项

 创建触发器

测试

 向httpd日志文件输入一个error

[root@zabbix-agent script]# echo 'Error'>> /var/log/httpd/error_log 
[root@zabbix-agent script]#  python3 log.py /var/log/httpd/error_log 
1

//   0为没有Error日志信息,1为有Error日志信息  

查看是否有告警信息

zabbix监控 mysql主从

部署mysql主从

1、部署mysql主从,使用mariadb进行操作
192.168.100.10  master.example.com  master
192.168.100.20  slave.example.com  slave

2、将server、agent1、master、slave主机的/etc/hosts文件全部设置为
192.168.100.40  server.example.com server
192.168.100.30  agent1.example.com agent1
192.168.100.10  master.example.com master
192.168.100.20  slave.example.com  slave

3、然后两台主机都安装mariadb  mariadb-server
yum install -y mariadb mariadb-server
systemctl restart mariadb;systemctl enable mariadb

4、两台主机都初始化mysql数据库
mysql_secure_installation

[root@master ~]# mysql_secure_installation 

NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!

In order to log into MariaDB to secure it, we'll need the current
password for the root user. If you've just installed MariaDB, and
haven't set the root password yet, you should just press enter here.

Enter current password for root (enter for none): 
OK, successfully used password, moving on...

Setting the root password or using the unix_socket ensures that nobody
can log into the MariaDB root user without the proper authorisation.

You already have your root account protected, so you can safely answer 'n'.

Switch to unix_socket authentication [Y/n] y
Enabled successfully!
Reloading privilege tables..
 ... Success!


You already have your root account protected, so you can safely answer 'n'.

Change the root password? [Y/n] y
New password: 
Re-enter new password: 
Password updated successfully!
Reloading privilege tables..
 ... Success!


By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them.  This is intended only for testing, and to make the installation
go a bit smoother.  You should remove them before moving into a
production environment.

Remove anonymous users? [Y/n] y
 ... Success!

Normally, root should only be allowed to connect from 'localhost'.  This
ensures that someone cannot guess at the root password from the network.

Disallow root login remotely? [Y/n] n
 ... skipping.

By default, MariaDB comes with a database named 'test' that anyone can
access.  This is also intended only for testing, and should be removed
before moving into a production environment.

Remove test database and access to it? [Y/n] y
 - Dropping test database...
 ... Success!
 - Removing privileges on test database...
 ... Success!

Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.

Reload privilege tables now? [Y/n] y
 ... Success!

Cleaning up...

All done!  If you've completed all of the above steps, your MariaDB
installation should now be secure.

Thanks for using MariaDB!

5、修改数据库配置文件,然后两台主机都重启mariadb服务
Master:
vim /etc/my.cnf
[mysqld]
#添加两行数据
log_bin=mysql-bin
server_id=20

systemctl restart mariadb

Slave:
vim /etc/my.cnf
[mysqld]
#添加两行数据
log_bin=mysql-bin
server_id=30
systemctl restart mariadb



6、进入数据库配置主从
Master:
mysql -u root -p   #密码为redhat
grant all privileges  on *.* to root@'%' identified by "redhat";
grant replication slave on *.* to 'user'@'slave' identified by 'redhat';

Slave:
grant all privileges  on *.* to root@'%' identified by "redhat";
change master to master_host='master',master_user='user',master_password='redhat';
start slave;
show slave status\G

Slave_IO_Running: Connecting
Slave_SQL_Running: Yes

 安装zabbix-agent

 slave主机中安装zabbix-agent软件包,将slave添加到zabbix web监控平台中

将server主机的zabbix.repo复制过来,接着安装zabbix-agent

更改yum源

1

2

[root@slave yum.repos.d]# vim zabbix.repo 
[root@slave yum.repos.d]# cat zabbix.repo 
[zabbix]
name=Zabbix Official Repository - $basearch
baseurl=https://mirrors.aliyun.com/zabbix/zabbix/7.0/rocky/9/$basearch/
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-ZABBIX-B5333005

[zabbix-non-supported]
name=Zabbix Official Repository non-supported - $basearch
baseurl=https://mirrors.aliyun.com/zabbix/non-supported/rhel/9/$basearch/
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-ZABBIX-08EFA7DD
gpgcheck=1

[zabbix-sources]
name=Zabbix Official Repository source code - $basearch
baseurl=https://repo.zabbix.com/zabbix/7.0/rocky/9/SRPMS
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-ZABBIX-B5333005
gpgcheck=1
[root@slave yum.repos.d]# 

 安装zabbix-agent

yum -y install zabbix-agent

修改/etc/zabbix/zabbix_agentd.conf

vim /etc/zabbix/zabbix_agentd.conf

Server=192.168.100.10

ServerActive=192.168.100.40

Hostname=slave

重启服务

[root@slave ~]# systemctl restart zabbix-agent.service 
[root@slave ~]# systemctl enable zabbix-agent.service 

在监控平台添加主机

 

 在slave上配置脚本

[root@slave ~]# cd /etc/zabbix/
[root@slave zabbix]# mkdir script
[root@slave zabbix]# cd script/
[root@slave script]# cat mysql_slave_status.sh 
#!/bin/bash
USER="root"
PASSWD="redhat"
NAME=$1

function IO {
    Slave_IO_Running=`mysql -u $USER -p$PASSWD -e "show slave status\G;" 2> /dev/null |grep Slave_IO_Running |awk '{print $2}'`
    if [ $Slave_IO_Running == "Connecting" ];then
        echo 0 
    else
        echo 1 
    fi
}

function SQL {
    Slave_SQL_Running=`mysql -u $USER -p$PASSWD -e "show slave status\G;" 2> /dev/null |grep Slave_SQL_Running: |awk '{print $2}'`
if [ $Slave_SQL_Running == "Yes" ];then
echo 0 
    else
        echo 1 
    fi

}

case $NAME in
   io)
       IO
   ;;
   sql)
       SQL
   ;;
   *)
        echo -e "Usage: $0 [io | sql]"

修改属主和权限

chmod +x mysql_slave_status.sh

chown -R zabbix.zabbix /etc/zabbix/script/

 验证脚本是否正确

[root@slave script]# ./mysql_slave_status.sh io
0
[root@slave script]# ./mysql_slave_status.sh sql
0
[root@slave script]# 

编写一个自配置文件, 里面指定上面编写的脚本的路径,然后重启服务

[root@slave ~]# cd /etc/zabbix/zabbix_agentd.d/
[root@slave zabbix_agentd.d]# vim userparameter_mysql_slave.conf
[root@slave zabbix_agentd.d]# cat userparameter_mysql_slave.conf 
UserParameter=mysql.slave[*],/etc/zabbix/script/mysql_slave_status.sh $1

设置属主

[root@slave zabbix_agentd.d]# chown -R zabbix.zabbix /etc/zabbix/zabbix_agentd.d/userparameter_mysql_slave.conf[root@slave zabbix_agentd.d]# ll
total 4
-rw-r--r-- 1 zabbix zabbix 73 Aug 14 11:21 userparameter_mysql_slave.conf

 重启服务

systemctl restart zabbix-agent.service

去zabbix server验证状态,使用zabbix_get命令验证,需要下载zibbix-get包

验证的结果如果是0,为正常,如果为1,则异常

[root@zabbix-server ~]# zabbix_get -s 192.168.100.20 -k mysql.slave[io]
0
[root@zabbix-server ~]# zabbix_get -s 192.168.100.20 -k mysql.slave[sql]
0
[root@zabbix-server ~]# 

在zabbix web平台配置监控项

新建监控项

1

2

 新建触发器

测试

 将mysql主从关闭

查看zabbix告警信息,验证邮箱是由能接收到邮件

mysql -u root -plinux -e "stop slave;"

告警

 邮箱

恢复mysql主从 

mysql -u root -plinux -e "start slave;"

zabbix监控主从延迟 

cd /etc/zabbix/script

#Behind:落后主库多少秒,存在秒数则出现主库复制之间的延迟   

#只要当延迟数据为NULL,以及0-200是正常的,否则其他数字输入1表示错误

vim mysql_delay.sh

#!/bin/bash     
delay=$(mysql -uroot -predhat -e 'show slave status\G' 2> /dev/null | grep 'Seconds_Behind_Master' | awk '{print $2}')
if [ $delay == "NULL" ];then
echo 0
elif [ $delay -ge 0 ] && [ $delay -le 200 ];then         
echo 0
else
echo $delay
fi

设置属主和权限

chown -R zabbix.zabbix mysql_delay.sh

chmod +x mysql_delay.sh

配置agentd文件,并重启服务

vim /etc/zabbix/zabbix_agentd.d/userparameter_mysql_slave.conf

UserParameter=mysql.slave[*],/etc/zabbix/script/mysql_slave_status.sh $1

UserParameter=check_mysql_delay,/bin/bash /etc/zabbix/script/mysql_delay.sh

重启服务

systemctl restart zabbix-agent.service

测试 mysql_delay.sh脚本

[root@slave script]# pwd
/etc/zabbix/script
[root@slave script]# ./mysql_delay.sh 
0
[root@slave script]# 

在zabbix-server进行脚本测试

[root@zabbix-server ~]# zabbix_get -s 192.168.100.20 -k check_mysql_delay
0

 在zabbix web平台操作

添加监控项

 验证

配置触发器

查看告警信息

邮箱 

 监控mysql主从延迟成功,将触发器的值修改回来

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2039899.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

soapui调用接口参数传递嵌套xml,多层CDATA表达形式验证

1.环境信息 开发工具&#xff1a;idea 接口测试工具&#xff1a;soapui 编程语言&#xff1a;java 项目环境&#xff1a;jdk1.8 webservice&#xff1a;jdk自带的jws 处理xml&#xff1a;jdk自带的jaxb 2.涉及代码 package org.example.webdemo;import javax.jws.WebMethod; i…

Python,Spire.Doc模块,处理word、docx文件,极致丝滑

Python处理word文件&#xff0c;一般都是推荐的Python-docx&#xff0c;但是只写出一个&#xff0c;一句话的文件&#xff0c;也没有什么样式&#xff0c;就是36K。 再打开word在另存一下&#xff0c;就可以到7-8k&#xff0c;我想一定是python-docx的问题&#xff0c;但一直没…

汽车免拆诊断案例 | DAF(达富)汽油尾气处理液故障警示

故障现象 距离我上次在货卡上工作已经有一段时间了&#xff0c;让它们在道路上保持安全行驶是非常重要的。因此&#xff0c;当故障警示灯亮起时&#xff0c;我们需要迅速找到问题方向以及排除故障。 车辆的仪表板亮起多个故障灯以及警示灯&#xff0c;我们需要用解码器查找触…

数据分析与应用:微信-情人节红包流向探索分析

目录 0 需求描述 1 红包发送方用户的基本信息缺失率有多高?(即有多少红包发送方用户无法在用户基本信息表中匹配? 2 哪一组红包金额的拒收率最高? 3、最受二线城市欢迎的红包金额为?(即发出次数最多) 4 北上广深 4 大城市中,哪座城市的男性用户发出的 520 红包比例…

《密码编码学与网络安全原理与实践》第十四章第十五章密钥管理和用户认证

密钥管理与分发 密钥分发管理 传统上&#xff0c;对称加密被用于实现消息的保密性&#xff08;confidentiality&#xff09; 面临的攻击&#xff1a;局域网内监听、搭线窃听 传输媒介&#xff1a;线缆(双绞线、同轴电缆、光纤) (电磁波干扰)、微波链路、卫星信道 保密通信…

windows11-ubuntu-可爱的截图-启动时按F2可以选简体中文

windows11-ubuntu-可爱的截图-启动时按F2可以选简体中文

c++ 46 const

const伪命题 可以间接修改

Java-自定义注解中成员变量是Class<?>

在Java中,自定义注解可以包含各种类型的成员变量,包括 Class<?> 类型。这种类型的成员变量 通常用于表示某个类的类型信息。下面我将详细介绍如何定义一个包含 Class<?> 类型成员变量的 自定义注解,并给出一些示例代码。 1. 定义自定义注解 定义一个自定义…

jmeter使用while控制器时防止死循环

while 控制器&#xff1a;当前条件为true会一直循环&#xff0c;直到条件为false时退出循环 如果环境出现问题&#xff0c;可能导致死循环&#xff0c;需要进行设置 本次结合计时器进行组合配置&#xff0c;防止死循环 配置while控制器 条件&#xff1a;${__jexl3("${i…

libnl教程(2):发送请求

文章目录 前言示例示例代码构造请求创建套接字发送请求 简化示例 前言 前置阅读要求&#xff1a;libnl教程(1):订阅内核的netlink广播通知 本文介绍&#xff0c;libnl如何向内核发送请求。这包含三个部分&#xff1a;构建请求&#xff1b;创建套接字&#xff1b;发送请求。 …

milvus helm k8s开启监控

https://milvus.io/docs/monitor.md 文章写的很清晰 &#xff0c;我这边做一下个人补充&#xff0c;初版可能只是配置&#xff0c;具体的grafana 监控报表后期补一下。 架构如下&#xff1a; values.yaml 配置 enabled: true 改为true metrics:enabled: trueserviceMonitor:…

F.Enchanted

https://codeforces.com/gym/105139/problem/F24湖北省赛F 看了一下前面两种操作&#xff0c;做法不是很明显 后面两种操作&#xff0c;一看就是可持久化线段树&#xff0c;单点修改&#xff0c;版本复制 接下来解决前面的两种操作 第一个操作 两个相同的合成一个新的(33-&…

Linux基础-磁盘管理

基于Ubuntu 20.04环境测试验证。 一、磁盘空间查看 1.1 磁盘分区管理 - fdisk fdisk通常被用来查看系统磁盘的分区信息&#xff0c;同时fdisk也支持对磁盘空间进行分区&#xff08;下一章节介绍&#xff09;。 命令参数&#xff1a; Usage:fdisk [options] <disk> …

科普----Linux的前世今生

提到电脑的操作系统 相信大多数人会脱口而出&#xff1a;Windows&#xff01;MacOS&#xff01; 没错&#xff0c;这确实是目前市场上主流的两款操作系统。 但对于从事IT相关工作的人们来说&#xff0c;还有一种系统也必须拥有姓名 那就是Linux 看到这个词&#xff0c;大家…

unity游戏开发003:深入理解Unity中的坐标系

Unity游戏开发 “好读书&#xff0c;不求甚解&#xff1b;每有会意&#xff0c;便欣然忘食。” 本文目录&#xff1a; Unity游戏开发 Unity游戏开发深入理解Unity中的坐标系前言1. 坐标轴2. 左手坐标系3. 世界坐标系 vs. 局部坐标系4. 坐标变换5. 注意事项 总结 深入理解Unity中…

虚幻5|简单装备武器

一&#xff0c;首先我们要创建一个actor蓝图类 打开组件添加一个静态网格体&#xff0c;点击该组件&#xff0c;右侧细节找到网格体资产&#xff0c;选择需要的武器 三&#xff0c;打开角色的骨骼网格体&#xff0c;添加武器插槽 这个有些动作包里的骨骼网格体是加了骨骼&…

10 - Linux系统安全及应用

目录 一、账号安全控制 1.系统账号清理 2.密码安全控制 3.命令历史限制 4.终端自动注销 二、用户切换和用户提权 1. su 命令 - 切换用户 1.1 su 命令的用途及用法 1.2 限制使用su 命令的用户 1.3 查看su操作记录 2. sudo 命令 - 用户提权 2.1 sudo 命令的用途及用法…

Unity转Unreal5从入门到精通之如何实现一个简单的AI寻路

前言 我们今天使用最基础的引擎知识&#xff0c;来给大家创建一个简单的AI&#xff0c;可以追踪目标&#xff0c;攻击目标。 使用Unity类比的话&#xff0c;就是一个怪物预制体&#xff0c;放到了寻路上&#xff0c;当他视野看到目标后&#xff0c;就一直追踪目标&#xff0c;…

转账记录是怎样使用ZK实现证明的

目录 转账记录是怎样使用ZK实现证明的 1. 准备阶段 2. 生成证明 3. 转账记录的验证过程 4. 隐私保护 5. 应用场景 结论 转账记录是怎样使用ZK实现证明的 转账记录使用ZK(零知识证明)实现证明的过程,主要依赖于零知识证明技术中的协议,如ZK-SNARKs(Zero-Knowledge S…

72、docker资源管理

一、docker数据卷 容器和宿主机之间数据共享-----------挂载卷------------容器内的目录和宿主机的目录进行挂载。实现数据文件共享。 容器的生命周期是有限的&#xff0c;一旦重启所有对容器内部文件数据的修改以及保存的数据会被初始化&#xff0c;所以为了防止数据丢失&am…