zabbix 讲解

一、监控知识基本概述

1.为什么要使用监控

1.对系统不间断实时监控
2.实时反馈系统当前状态
3.保证服务可靠性安全性
4.保证业务持续稳定运行

2.如何进行监控,比如我们需要监控磁盘的使用率

1.如何查看磁盘使用率 df -h
2.监控磁盘的那些指标 block、 inode
3.获取的数值到达多少报警 80%

3.流行的监控工具

1.Zabbix
2.Lepus(天兔)数据库监控系统
3.Open-Falcon 小米
4.Prometheus(普罗米修斯, Docker、 K8s)

4.如何入手监控

1.硬件监控 路由器、交换机、防火墙
2.系统监控 CPU、内存、磁盘、网络、进程、 TCP
3.服务监控 nginx、 php、 tomcat、 redis、 memcache、 mysql
4.WEB 监控 请求时间、响应时间、加载时间、
5.日志监控 ELk(收集、存储、分析、展示) 日志易
6.安全监控 Firewalld、 WAF(Nginx+lua)、安全宝、牛盾云、安全狗
7.网络监控 smokeping 多机房
8.业务监控 活动引入多少流量、产生多少注册量、带来多大价值

5、单机时代如何监控

CPU 监控命令: w、 top、 htop、 glances

%Cpu(s): 0.3 us, 0.3 sy, 0.0 ni, 99.3 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
us 用户态: 跟用户的操作有关 35%
sy 系统态: 跟内核的处理有关 60%
id CPU 空闲:

内存监控命令: free     怎么获取内存可用的值 free -m|awk '/^Mem/{print $NF}'

[root@m01 ~]# free -h
              total        used        free      shared  buff/cache   available
Mem:           977M        105M        724M        6.6M        148M        729M
Swap:          1.0G          0B        1.0G

磁盘监控命令: df、 iotop

Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
sda 0.80 25.32 33.36 221034 291193
设备名 每秒传输次数 每秒读大小 每秒写大小 读的总大小 写的总大小

网络监控命令: ifconfig、 route、 glances、 iftop、 nethogs、 netstat

单位换算
Mbps 100Mbps/8
MB 12MB
iftop 中间的<= =>这两个左右箭头,表示的是流量的方向。
TX:发送流量、 RX:接收流量、 TOTAL:总流量
#查看 TCP11 中状态
netstat -an|grep ESTABLISHED
netstat -rn # 查看路由信息
netstat -lntup

随着时间的推移,用户不断的增多,服务随时可能扛不住会被 oom(out of memory),当系统内存不足的时候,会触发 oom
1.当系统内存不足的时候就会大量使用 swap
2.当系统大量使用 swap 的时候,系统会特别卡
注意: 有时可能内存还有剩余 300Mb-500Mb,但会发现 swap 依然被使用

[root@ZabbixServer ~]# dd if=/dev/zero of=/dev/null bs=800M
[root@ZabbixServer ~]# tail -f /var/log/messages
Out of memory: Kill process 2227 (dd) score 778 or sacrifice child
Killed process 2227 (dd) total-vm:906724kB, anon-rss:798820kB, file-rss:0kB

如何使用 shell 脚本来实现服务器的监控     需求: 每隔 1 分钟监控一次内存,当你的可用内存低于 100m,发邮件报警,要求显示剩余内存
1.怎么获取内存可用的值 free -m|awk '/^Mem/{print $NF}'
2.获取到内存可用的值如何和设定的阈值进行比较
3.比较如果大于 100m 则不处理,如果小于 100 则报警
4.如何每隔 1 分钟执行一次

[root@ZabbixServer ~]# cat free.sh
#!/usr/bin/bash
HostName=$(hostname)_$(hostname -i)
Date=$(date +%F)
while true;do
Free=$(free -m|awk '/^Mem/{print $NF}')
if [ $Free -le 100 ];then
echo "$Date: $HostName Mem Is < ${Free}MB"
fi
sleep 5
done

二、 zabbix组件安装

1、zabbix的组成

zabbix-agent (zabbix的客户端),通过zabbix-server收集安装zabbix-agent的机器日志,然后zabbix-server把数据存在mysql数据库中。zabbix-web是由php跟apache写的

2、zabbix服务端的安装

 2.1、下载rpm包

2.2、配置zabbix仓库

[root@localhost ~]# wget https://mirrors.tuna.tsinghua.edu.cn/zabbix/zabbix/4.0/rhel/7/x86_64/zabbix-release-4.0-1.el7.noarch.rpm
[root@localhost ~]# rpm -ivh zabbix-release-4.0-1.el7.noarch.rpm 
[root@localhost ~]# sed -i 's#repo.zabbix.com#mirrors.tuna.tsinghua.edu.cn/zabbix#g' /etc/yum.repos.d/zabbix.repo

2.3、安装 Zabbix 程序包,以及 MySQL、 Zabbix-agent

[root@localhost ~]# yum install -y zabbix-server-mysql zabbix-web-mysql zabbix-agent mariadb-server
[root@localhost ~]# systemctl start mariadb.service && systemctl enable mariadb.service

讲解:zabbix-server-mysql  初始化后,到导入mysql中要创建的表。zabbix-web-mysql的作用是Zabbix的web端会通过这些数据,来展示绘图。mariadb-server  安装的是是数据库

2.4、创建 Zabbix 数据库以及用户

方式一:删除test库、多余的垃圾账户

安装完数据库后,直接通过mysql登录,发现有test库、发现有多余的垃圾账户。
[root@m01 ~]# mysql
MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
+--------------------+
MariaDB [(none)]> select host,user from mysql.user;
+-----------------------+------+
| host                  | user |
+-----------------------+------+
| 127.0.0.1             | root |
| ::1                   | root |
| localhost             |      |
| localhost             | root |
| localhost.localdomain |      |
| localhost.localdomain | root |
+-----------------------+------+

删除test库、多余的垃圾账户
[root@localhost ~]# mysql_secure_installation

Enter current password for root (enter for none): 输入root密码,由于没设置,所以回车
Set root password? [Y/n]   按Y设置root密码123456
Remove anonymous users? [Y/n]    是不是移除匿名用户,就是mysql.user中的多余垃圾账户,按Y
Disallow root login remotely? [Y/n] 是不是不允许root远程登录,按Y
Remove test database and access to it? [Y/n] 移除test数据库,按Y
Reload privilege tables now? [Y/n] 重载权限表,按Y

方式二:直接初始化
[root@m01 ~]# mysqladmin password 123456  初始化密码命令

登录给创建、授权zabbix
[root@m01 ~]# mysql -uroot -p123456
MariaDB [(none)]> create database zabbix character set utf8 collate utf8_bin;
MariaDB [(none)]> grant all privileges on zabbix.* to zabbix@localhost identified by 'zabbix';
MariaDB [(none)]> flush privileges;

2.5、导入 Zabbix 数据至数据库中

[root@localhost ~]# cd /usr/share/doc/zabbix-server-mysql-4.0.27/
[root@localhost zabbix-server-mysql-4.0.27]# ll   create.sql.g为数据库
-rw-r--r-- 1 root root      98 5月  11 2020 AUTHORS
-rw-r--r-- 1 root root 1008666 11月 30 17:10 ChangeLog
-rw-r--r-- 1 root root   17990 5月  11 2020 COPYING
-rw-r--r-- 1 root root 1316367 11月 30 17:36 create.sql.gz
-rw-r--r-- 1 root root      52 5月  11 2020 NEWS
-rw-r--r-- 1 root root    1317 11月 30 17:10 README

[root@localhost zabbix-server-mysql-4.0.27]# zcat create.sql.gz |head -10 查看前10行没有创建数据库,没有use 数据库,导入数据库的时候需要指定zabbix
CREATE TABLE `users` (
	`userid`                 bigint unsigned                           NOT NULL,
	`alias`                  varchar(100)    DEFAULT ''                NOT NULL,
	`name`                   varchar(100)    DEFAULT ''                NOT NULL,
	`surname`                varchar(100)    DEFAULT ''                NOT NULL,
	`passwd`                 varchar(32)     DEFAULT ''                NOT NULL,
	`url`                    varchar(255)    DEFAULT ''                NOT NULL,
	`autologin`              integer         DEFAULT '0'               NOT NULL,
	`autologout`             varchar(32)     DEFAULT '15m'             NOT NULL,
	`lang`                   varchar(5)      DEFAULT 'en_GB'           NOT NULL,

[root@localhost zabbix-server-mysql-4.0.27]# zcat /usr/share/doc/zabbix-server-mysql-4.0.27/create.sql.gz  |mysql -uzabbix -pzabbix zabbix

2.5、编辑/etc/zabbix/zabbix_server.conf 文件,修改数据库配置

[root@localhost ]# vi /etc/zabbix/zabbix_server.conf
### Option: DBHost
#       Database host name.
#       If set to localhost, socket is used for MySQL.
#       If set to empty string, socket is used for PostgreSQL.
#
# Mandatory: no
# Default:
# DBHost=localhost
DBHost=localhost

### Option: DBPassword
#       Database password.
#       Comment this line if no password is used.
#
# Mandatory: no
# Default:
# DBPassword=
DBPassword=zabbix

[root@localhost ]# grep "^DB" /etc/zabbix/zabbix_server.conf 
DBHost=localhost
DBName=zabbix
DBUser=zabbix
DBPassword=zabbix

2.6、启动 Zabbix 服务进程,并加入开机自启

[root@localhost ~]# systemctl start zabbix-server.service;systemctl enable zabbix-server.service

2.7、配置启动 Apache Web 服务器

配置 Apache 的配置文件/etc/httpd/conf.d/zabbix.conf,修改时区
[root@localhost ~]# vi /etc/httpd/conf.d/zabbix.conf   修改#php_value如下   
        php_value always_populate_raw_post_data -1
        php_value date.timezone Asia/Shanghai
    </IfModule>

[root@localhost ~]# systemctl start httpd;systemctl enable httpd

3、zabbix服务端的配置

3.1 、访问http://10.4.7.3/zabbix/

点击next step

全部显示ok 点击next step

什么都不改,只添加一个zabbix,点击next step

什么都不改,只添加一个名字,点击next step,点击next step

安装成功

3.2、登录zabbix,配置成中文

默认账户:Admin ,密码zabbix

3.3、启动server端的agent,来实现监控自己

[root@localhost ~]# systemctl start zabbix-agent.service;systemctl enable zabbix-agent.service

3.4、中文乱码

[root@localhost ]# yum install wqy-microhei-fonts -y
[root@localhost ]# ll /usr/share/zabbix/assets/fonts/
lrwxrwxrwx 1 root root 33 1月  25 21:59 graphfont.ttf -> /etc/alternatives/zabbix-web-font

[root@localhost ]# cp /usr/share/fonts/wqy-microhei/wqy-microhei.ttc /usr/share/zabbix/assets/fonts/graphfont.ttf
cp:是否覆盖"/usr/share/zabbix/assets/fonts/graphfont.ttf"? y

4、zabbix客户端安装配置

4.1、zabbix客户端的安装

[root@localhost ~]# rpm -ivh https://mirror.tuna.tsinghua.edu.cn/zabbix/zabbix/4.0/rhel/7/x86_64/zabbix-agent-4.0.11-1.el7.x86_64.rpm
[root@localhost ~]# yum install zabbix-agent -y

4.2、配置zabbix-agent

[root@localhost ~]# mv /etc/zabbix/zabbix_agentd.conf /etc/zabbix/zabbix_agentd.conf_old
[root@localhost ~]# vi /etc/zabbix/zabbix_agentd.conf
PidFile=/var/run/zabbix/zabbix_agentd.pid
LogFile=/var/log/zabbix/zabbix_agentd.log
LogFileSize=0
Server=10.4.7.3
ServerActive=10.4.7.3
Hostname=web01
Include=/etc/zabbix/zabbix_agentd.d/*.conf

解释:
PidFile、LogFile PID文件跟日志
Server主机地址
ServerActive 也是服务端地址,检测服务端是否存活
Hostname 本机的名字

4.3、配置本机hostname

[root@localhost ~]# hostnamectl set-hostname web01   配置本机的名字
[root@web01 ~]# vi /etc/hosts  增加一条
10.4.7.2    web01

[root@web01 ~]# systemctl restart zabbix-agent.service;systemctl enable zabbix-agent.service  重启

5、zabbix-get配置

安装zabbix-get检测客户端跟服务端是不是连接成功,是不是能获取对应的key(key就是调用客户端的资源参数,比如cpu)。前提是服务端安装了zabbix-agent

5.1、安装在服务端

[root@localhost ~]#  yum install zabbix-get -y

5.2、测试客户端的key,服务端能不能取到。

查看大致客户端有哪些key
 

[root@localhost fonts]# zabbix_get -s 10.4.7.2 -k system.cpu.util[,idle]
96.057530   说名无问题
 

6、zabbix服务端添加客户端

点击创建主机

主机名称随意,先按照机器的名字web01,群组名称随意添加,agent的IP地址是客户端的IP地址

点击模板,添加监控项,点击添加

添加后,如下,点击最下面的添加

三、 zabbix自定义监控

监控项:你要监控的内容項目1项目2
模板:将一类的监控項汇总在一起,单独保存成一个集合。可以直接被其他主机调用
agent:客户端,就是你要监控的那台主机
键值:监控项目名称:将空项目返回的值 
应用集合:tag,就是把系统、网络等参数组成各自集合,在把系统参数中,调查全部cpu,全部内存等信息,划分为各自的集合
触发器:设定某个监控项报警的阈值条件
图形:监控项的趋势可以是多个监控项的内容 
聚合图形:把多个图形放在一起展示

3.1、创建监控项

目标:监控TCP连接状态
思路:1、取到TCP连接状态的值  2、zabbix去调用这个值
实现:在客户端操作,客户端agnet监控后。传递给server

1、脚本:
[root@web01 ~]#  netstat -antp |awk 'NR>2{print $6}'|sort|uniq -c|sort -rn
     65 TIME_WAIT
     15 LISTEN
      1 ESTABLISHED

[root@web01 ~]# netstat -antp |awk 'NR>2{print $6}'|grep "TIME_WAIT" |wc -l

2、查看zabbix自定义应用脚本
[root@web01~]# cd /etc/zabbix/zabbix_agentd.d/
[root@web01zabbix_agentd.d]# tail -2 userparameter_mysql.conf 
UserParameter=mysql.ping,HOME=/var/lib/zabbix mysqladmin ping | grep -c alive
UserParameter=mysql.version,mysql -V

自定义监控          自定义监控项的键名称,数值=命令
UserParameter=mysql.ping,HOME=/var/lib/zabbix mysqladmin ping | grep -c alive

3、编写自己的自定义监控脚本
UserParameter=tcp_TIME_WAIT,netstat -antp |awk 'NR>2{print $6}'|grep "TIME_WAIT" |wc -l
UserParameter=tcp_LISTEN,netstat -antp |awk 'NR>2{print $6}'|grep "LISTEN" |wc -l
UserParameter=tcp_ESTABLISHED,netstat -antp |awk 'NR>2{print $6}'|grep "ESTABLISHED" |wc -l

4、上述配置写入那里?
[root@web01 zabbix]# cat /etc/zabbix/zabbix_agentd.conf |grep Include
Include=/etc/zabbix/zabbix_agentd.d/*.conf  这句话代代表在/etc/zabbix/zabbix_agentd.d/创建的文件,只要.conf 结尾的都识别

5、创建自定义监控配置

[root@web01 ]# vi /etc/zabbix/zabbix_agentd.d/tcp.conf
UserParameter=tcp_TIME_WAIT,netstat -antp |awk 'NR>2{print $6}'|grep "TIME_WAIT" |wc -l
UserParameter=tcp_LISTEN,netstat -antp |awk 'NR>2{print $6}'|grep "LISTEN" |wc -l
UserParameter=tcp_ESTABLISHED,netstat -antp |awk 'NR>2{print $6}'|grep "ESTABLISHED" |wc -l

[root@web01 zabbix_agentd.d]# systemctl restart zabbix-agent.service

6、测试验证

[root@localhost zabbix]# zabbix_get -s 10.4.7.2 -k tcp_TIME_WAIT 
(Not all processes could be identified, non-owned process info   这个报错是由于zabbix的进程是由zabbix启动的,netstat -antp中p是查看pid,有些pid是由root启动,zabbix无法调用root
 will not be shown, you would have to be root to see it all.)
63

7、修改监控脚本配置

[root@web01 ]# vi /etc/zabbix/zabbix_agentd.d/tcp.conf
UserParameter=tcp_TIME_WAIT,netstat -ant |awk 'NR>2{print $6}'|grep "TIME_WAIT" |wc -l
UserParameter=tcp_LISTEN,netstat -ant |awk 'NR>2{print $6}'|grep "LISTEN" |wc -l
UserParameter=tcp_ESTABLISHED,netstat -ant |awk 'NR>2{print $6}'|grep "ESTABLISHED" |wc -l

[root@web01 zabbix_agentd.d]# systemctl restart zabbix-agent.service

8、测试验证

[root@localhost zabbix]# zabbix_get -s 10.4.7.2 -k tcp_TIME_WAIT 
59
[root@localhost zabbix]# zabbix_get -s 10.4.7.2 -k tcp_LISTEN
15
[root@localhost zabbix]# zabbix_get -s 10.4.7.2 -k tcp_LISTEN

9、配置监控项

点击主机--监控项(web01)

点击创建监控项

按照如下配置创建tcp_time_wait,键值、新的应用集手写--添加

点击应用集--TCP--应用---tcp_time_wait

点击克隆

创建tcp_LISTEN,

创建tcp_ESTABLISHED

10、查看数据

3.2、创建触发器

表达式--添加--监控项--tcp_TIME_WAIT-- 结果                      功能last-最后(数值随时在动,最后一次,最新的数值)

测试验证你的表达式对不对

测试完成后--添加--在出来的也页面显示

过一阵子报警显示,解决办法把阈值调高或者解决问题

3.3、创建图形

选择主机:web01   选择图形

3.4、创建聚合图形

创建聚合图形

名称 web01面板,添加

点击更改

点击图形--点击动态监控项--添加

在中间加入图形

在中间再加入图形,点击这个+

3.5、创建模板

点击上面的监控项--创建监控项等。

然后添加一台新的主机,然后点击模板

添加刚才创建的模板

3.6、邮件报警

3.6.1、配置发件人。报警了,通过那个邮箱发送

点击Email

修改信息:SMTP服务器、SMTP服务器端口、SMTP HELO、SMTP电邮、SSL验证对端、SSL验证主机(注意:密码不是你的qq密码,而是授权码)---点击更新

qq的信息怎么查看

3.6.2、配置收件人,谁接受信息

3.6.3、配置动作

报警了,发不发给接收人,需要配置,点击停用的后会变成启用

测试触发报警后,会发现报警了发一个消息,然后问题解决了还是发一个消息

此配置是 Problem: {EVENT.NAME}、Resolved: {EVENT.NAME}

3.6.4、修改报警邮件信息的模板

点击模板

发送警告

报警邮件标题可以使用默认信息,亦可使用如下中文报警内容
名称:Action-Email
默认标题:故障{TRIGGER.STATUS},服务器:{HOSTNAME1}发生: {TRIGGER.NAME}故障!
告警主机:{HOSTNAME1}
告警时间:{EVENT.DATE} {EVENT.TIME}
告警等级:{TRIGGER.SEVERITY}
告警信息: {TRIGGER.NAME}
告警项目:{TRIGGER.KEY1}
问题详情:{ITEM.NAME}:{ITEM.VALUE}
当前状态:{TRIGGER.STATUS}:{ITEM.VALUE1}
事件ID:{EVENT.ID} 

恢复警告

恢复标题:恢复{TRIGGER.STATUS}, 服务器:{HOSTNAME1}: {TRIGGER.NAME}已恢复!
恢复信息:
告警主机:{HOSTNAME1}
告警时间:{EVENT.DATE} {EVENT.TIME}
告警等级:{TRIGGER.SEVERITY}
告警信息: {TRIGGER.NAME}
告警项目:{TRIGGER.KEY1}
问题详情:{ITEM.NAME}:{ITEM.VALUE}
当前状态:{TRIGGER.STATUS}:{ITEM.VALUE1}
事件ID:{EVENT.ID}

3.7、微信报警

3.7.1、微信报警准确说为脚本报警,所以配置脚本

其中脚本名称怎么写,放在那里,查看配置文件,调取的是/usr/lib/zabbix/alertscripts目录
[root@localhost zabbix]# vim /etc/zabbix/zabbix_server.conf

编写脚本模板:
[root@localhost zabbix]# vim /usr/lib/zabbix/alertscripts/weixin.py   

#!/usr/bin/env python

import requests
import sys
import os
import json
import logging

logging.basicConfig(level = logging.DEBUG, format = '%(asctime)s, %(filename)s, %(levelname)s, %(message)s',
                datefmt = '%a, %d %b %Y %H:%M:%S',
                filename = os.path.join('/tmp','weixin.log'),
                filemode = 'a')

corpid='微信企业号corpid'
appsecret='应用的Secret'
agentid=应用的id

token_url='https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=' + corpid + '&corpsecret=' + appsecret
req=requests.get(token_url)
accesstoken=req.json()['access_token']

msgsend_url='https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=' + accesstoken

touser=sys.argv[1]
subject=sys.argv[2]
#toparty='3|4|5|6'
message=sys.argv[2] + "\n\n" +sys.argv[3]

params={
        "touser": touser,
#       "toparty": toparty,
        "msgtype": "text",
        "agentid": agentid,
        "text": {
                "content": message
        },
        "safe":0
}

req=requests.post(msgsend_url, data=json.dumps(params))

logging.info('sendto:' + touser + ';;subject:' + subject + ';;message:' + message)

解释:

1、其中只需要配置#填写微信公众号信息corpid、appsecret、agentid
2、#填写微信公众号信息
     corpid='微信企业号corpid'
     appsecret='应用的Secret'
     agentid=应用的id

    #获取accesstoken
     token_url='https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=' + corpid + '&corpsecret=' + appsecret
     req=requests.get(token_url)
     accesstoken=req.json()['access_token']

    #发送消息
    msgsend_url='https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=' + accesstoken

修改脚本模格式板:

zabbix动作执行python脚本的时候,如果脚本格式不是unix会报错:如 /usr/bin/env python :No such file or directory,错误原因是脚本文件格式为dos格式,需要转换为unix格式,解决方法如下:
用vim文件名进入编辑文件格式:

:set ff 然后回车,我这个文件显示为dos格式。
:set ff=unix 回车,设置为unix格式。
:wq

python脚本一定不要有中文

3.7.2、获取微信脚本参数

corpid获取:自己注册微信企业版,登录后我的企业最下方有企业ID

appsecret、agentid获取:创建应用,应用会生成appsecret、agentid

3.7.3、测试脚本是否有误

[root@localhost zabbix]# vim /usr/lib/zabbix/alertscripts/weixin.py     修改/usr/lib/zabbix/alertscripts/weixin.py,改成对应

发信测试

测试模板:
[root@localhost alertscripts]# python weixin.py 你的账号 '发信测试' ‘微信测试消息’

测试过程:
[root@localhost alertscripts]# python weixin.py JiangWei '发信测试' ‘微信测试消息’
Traceback (most recent call last):
  File "weixin.py", line 4, in <module>
    import requests
ImportError: No module named requests  报错没有缺少模块 requests,需要安装python-pip

安装python-pip:
[root@localhost alertscripts]# yum install -y python
[root@localhost alertscripts]# yum install python-pip -y
[root@localhost alertscripts]# pip install requests

测试过程:无问题就说明没问题
[root@localhost alertscripts]# python weixin.py JiangWei '发信测试' ‘微信测试消息’
[root@localhost alertscripts]#

查看测试结果:添加成员,通过微信邀请,添加后,查看应用的管理范围。

微信扫描二维码

方式一:通过 python weixin.py JiangWei '发信测试' ‘微信测试消息’  就会提示

方式二:写脚本让那些成员可以看

[root@localhost alertscripts]# vi name.txt 
zhangsan
lisi
JiangWei

[root@localhost alertscripts]# vi send.sh 
#!/bin/bash

for i in $(cat name.txt)
do
  /usr/bin/python weixin.py ${i} $1 $2
done

[root@localhost alertscripts]# bash send.sh '测试' '测试'

3.7.4、删除脚本日志

weixin.py脚本会生成日志,这个日志的权限是rw-r-r root root ,所以如果不删除或者不把次脚本权限修改,应用之后发会报警,提示

解决方案:rm -f /tmp/weixin.log

3.7.5、配置发信人

脚本名称:自动调用/usr/lib/zabbix/externalscripts下文件,所以写weixin.py
变量{ALERT.SENDTO}: 代表是发给谁,对应的是在user中用户的联系方式,可以是电话号码、Email-address等
变量{ALERT.SUBJECT}: 对应的是在action中的subject主题
变量{ALERT.MESSAGE}:对应的是在action中的message信息,包含operation和recovery operation
然后点击添加

3.7.4、配置收件人

报警后发现微信报警失败了,查看报表-动作日志

四、zabbix服务深入

1、 Grafana自定义图形

1.1、安装grafana

[root@localhost ~]# wget https://dl.grafana.com/oss/release/grafana-6.3.2-1.x86_64.rpm
[root@localhost ~]# yum localinstall grafana-6.3.2-1.x86_64.rpm -y
[root@localhost ~]# systemctl start grafana-server.service 
[root@localhost ~]# systemctl enable grafana-server.service

1.2、访问网址

[root@localhost ~]# netstat -tulpn |grep grafana
tcp6       0      0 :::3000                 :::*                    LISTEN      70433/grafana-serve 

访问:http://10.4.7.3:3000,默认账户admin , 密码admin 

1.3、安装并激活zabbix插件

安装数据源,让Grafana调用zabbix数据

[root@localhost ~]# grafana-cli plugins list-remote|grep zabbix
id: alexanderzobnin-zabbix-app version: 3.10.4

[root@localhost ~]# grafana-cli plugins install alexanderzobnin-zabbix-app

[root@localhost ~]# 可以通过iftop查看

[root@localhost ~]# systemctl restart grafana-server.service;systemctl enable grafana-server.service

1.4、网页操作-激活zabbix插件

enable激活

点击add data source

点击后报错:

问题描述 Grafana6.x使用grafana-cli命令在线安装zabbix插件

grafana-cli plugins install alexanderzobnin-zabbix-app

然后添加zabbix数据源时候会出现如下图报错:

问题原因

在2020.08.25后zabbix插件更新了4.0.0版本,4.x后的版本需要依赖于grafana7.0,不兼容grafana6.x版本
在这里插入图片描述

解决方法 安装zabbix3.12.4插件
在这里插入图片描述
浏览器访问 Zabbix plugin for Grafana | Grafana Labs 下载grafana-zabbix 3.12.4的zip包
在这里插入图片描述
上传到zabbix服务器上解压到grafana插件目录下,重启grafana服务即可

unzip alexanderzobnin-grafana-zabbix-v3.12.4-1-g309146f.zip -d /var/lib/grafana/plugins/
systemctl restart grafana-server

点击选中添加

最后的结果

然后点击

添加软件源

三个都import

2、zabbix使用percona监控mysql

2.1、安装php环境

[root@localhost ~]# yum install php php-mysql -y   percona需要php环境

2.2、下载软件

注意,安装完成后会有提示模版的路径位置

[root@m01 ~]# cd /data/soft/
[root@m01 /data/soft]# wget https://www.percona.com/downloads/percona-monitoring-plugins/percona-monitoring-plugins-1.1.8/binary/redhat/7/x86_64/percona-zabbix-templates-1.1.8-1.noarch.rpm
[root@m01 /data/soft]# rpm -ivh percona-zabbix-templates-1.1.8-1.noarch.rpm 
警告:percona-zabbix-templates-1.1.8-1.noarch.rpm: 头V4 DSA/SHA1 Signature, 密钥 ID cd2efd2a: NOKEY
准备中...                          ################################# [100%]
正在升级/安装...
   1:percona-zabbix-templates-1.1.8-1 ################################# [100%]

Scripts are installed to /var/lib/zabbix/percona/scripts
Templates are installed to /var/lib/zabbix/percona/templates

解释:rpm -ivh percona-zabbix-templates-1.1.8-1.noarch.rpm,只不过是下载两个文件,一个是/var/lib/zabbix/percona/scripts取数值的脚本 /var/lib/zabbix/percona/templates模板

2.3、下载软件查看目录

[root@localhost ~]# ll /var/lib/zabbix/percona/scripts
-rwxr-xr-x 1 root root  1251 1月  10 2018 get_mysql_stats_wrapper.sh  #ss_get_mysql_stats.php数值太多,过滤调用部分的.php数值
-rwxr-xr-x 1 root root 60679 1月  10 2018 ss_get_mysql_stats.php  #获取mysql状态脚本

[root@localhost ~]# ll /var/lib/zabbix/percona/templates
-rw-r--r-- 1 root root  18866 1月  10 2018 userparameter_percona_mysql.conf  #zabbix监控项配置文件
-rw-r--r-- 1 root root 269258 1月  10 2018 zabbix_agent_template_percona_mysql_server_ht_2.0.9-sver1.1.8.xml  #zabbix模板文件

2.4、配置启动参数

修改get_mysql_stats_wrapper.sh脚本第19行,里面没有写数据库登陆信息添加mysql账号密码

修改ss_get_mysql_stats.php脚本

复制自定义监控项配置文件到zabbix目录

[root@localhost scripts]# cd /var/lib/zabbix/percona/templates/
[root@localhost templates]# cp userparameter_percona_mysql.conf /etc/zabbix/zabbix_agentd.d/

2.5、启动agent

[root@localhost scripts]# systemctl restart zabbix-agent 

测试key

[root@localhost templates]# yum install zabbix-get -y
[root@localhost templates]# zabbix_get -s 127.0.0.1 -k MySQL.Sort-scan
5627

2.6、导入模版

默认自带/var/lib/zabbix/percona/templates/zabbix_agent_template_percona_mysql_server_ht_2.0.9-sver1.1.8.xml  这是2.几模板,我们使用的zabbix4.几,不好使
下载最新的[root@localhost ~]# wget http://jaminzhang.github.io/soft-conf/Zabbix/zbx_percona_mysql_template.xml

导入zabbix/zbx_percona_mysql_template.xml

查看mysql模板

因为zabbix server有mysql

模板选择mysql,然后点击更新上面的添加,然后更新

查看mysql应用集

间隔时间太长了,全选

查看最新数据

3、自动发现和自动注册

自动发现

扫描配置范围内的主机,如果检测到有agent,自动加入zabbix Server。客户端是被动模式,缺点zabbix server压力大(网段大,客户端多),时间消耗多。

3.1、配置自动发现IP范围


Zabbix 客户端 "system.uname"  这是一个key,一个唯一标识,怕IP重复

[root@localhost ~]# zabbix_get -s 127.0.0.1 -k system.uname
Linux localhost.localdomain 3.10.0-1127.19.1.el7.x86_64 #1 SMP Tue Aug 25 17:23:54 UTC 2020 x86_64

3.2、配置触发自动检测的机制动作

点击Auto discovery. Linux servers. 

添加一个细节

点击添加后

添加新的触发条件

点击添加后,更新

自动注册

zabbix Server等待 zabbix agent主动上报(主动模式),登记;缺点agent有可能找不到Server(配置出错)

点击创建动作

匹配条件

选择了主机名称:web,就是只要是主机名称是带web,就算

配置内容,这个是你在加进zabbix后,前提配置了报警,他就会发送消息,消息内容就是Host name,Host IP, Agent port。最下面的是你加入到zabbix,需要发给谁消息,你的主机在哪个群组下,你要自动关联哪个模板

注意:这里需要提前配置agnet的conf。修改zabbix-agent.conf配置文件

[root@web02 ~]# cat /etc/zabbix/zabbix_agentd.conf        
PidFile=/var/run/zabbix/zabbix_agentd.pid
LogFile=/var/log/zabbix/zabbix_agentd.log
LogFileSize=0
Server=10.0.1.61
ServerActive=10.0.1.61
Hostname=web02
Include=/etc/zabbix/zabbix_agentd.d/*.conf

4、主动模式和被动模式

被动模式

默认为被动模式:服务端发送一条指令,客户端反回一个数据,服务端会响应接受成功后,在发一条指令。如果有些监控想比较慢,客户端反馈会超时。效率低
比如看时间是一个监控项是1s,说明客户端一次只是发一个

主动模式

主动模式:假如100个监控项,服务端将所需要的100个打包请求,一次发给客户端,客户端全部执行完再一次返回给服务端。

或者

5、低级自动发现

5.1、介绍

自动发现:自动添加主机。
低级自动发现:自动添加监控项,比如监控不同机器的mysql 多实例、磁盘空间、网卡等,实现自动获取有多少个盘符,然后在进行一 一监控

查看zabbix系统自动加载的监控项。例子:zabbix server。点击上发图的zabbix server后的监控项后,点击非模板监控项

红色的代表就是低级自动发现。比如自动是识别有一个网卡,Outgoing network traffic on ens33(出口)  Incoming network traffic on ens33(进入)

查看低级自动发现规则,例如更新周期。点击zabbix server的自动发现规则,提示1h更新

思考:如何实现能够自动检测ens33。点击监控项原型。查看规则中的键值为net.if.in[{#IFNAME}]

使用zabbix_get查看数值net.if.in[{#IFNAME}]。其中IFNAME为变量,如ens33

[root@localhost ~]# zabbix_get -s 127.0.0.1 -k net.if.in[ens33]  发现zabbix_gaent有对应的键值
62502411
[root@localhost ~]# zabbix_get -s 127.0.0.1 -k net.if.in[eth1]  如果没有eth1,他不会取到
ZBX_NOTSUPPORTED: Cannot find information for this network interface in /proc/net/dev.

[root@localhost ~]# cat /proc/net/dev
Inter-|   Receive                                                |  Transmit
 face |bytes    packets errs drop fifo frame compressed multicast|bytes    packets errs drop fifo colls carrier compressed
    lo: 8924317  103316    0    0    0     0          0         0  8924317  103316    0    0    0     0       0          0
 ens33: 62602172  516311    0    0    0     0          0         0 77145253  574299    0    0    0     0       0          0

5.2、自动监控网卡的mac地址

1、取mac地址

[root@localhost ~]# ifconfig 
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.4.7.3  netmask 255.0.0.0  broadcast 10.255.255.255
        inet6 fe80::20c:29ff:fe7f:6ca  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:7f:06:ca  txqueuelen 1000  (Ethernet)
        RX packets 518639  bytes 62891605 (59.9 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 576947  bytes 77458306 (73.8 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 104230  bytes 8992141 (8.5 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 104230  bytes 8992141 (8.5 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

[root@localhost ~]# ifconfig ens33 |grep -oP '(?<=ether )\S+'   这里用到grep零宽断言
00:0c:29:7f:06:ca

解释:
后发断言 (?<=exp) //表示匹配表达式后面的位置
所以grep -P '(?<=ether )' 代表匹配ether前无任何字符,但是后面有字符的行数据。
因为(?<=ether )后面要接取ether后面的几位数字,如果不加什么都取不了
\S 非空白符,grep -P '(?<=ether )\S代表取ether 后的一个字符
+代表一直取同性质的数据,所以\S+代表只要是没遇到空格,就都取
所以grep -oP '(?<=ether )\S+'代表,取ether 后的数据,遇到空格就停止。

2、编写zabbix调取mac地址配置文件

   查看自带的低级服务发现怎么写的

[root@localhost ~]# cat /etc/zabbix/zabbix_agentd.d/mysql_discovery.conf
UserParameter=mysql.discovery,/bin/bash /server/scripts/mysql_discovery.sh

 自定义编写mac的脚本

[root@localhost ~]# vi /etc/zabbix/zabbix_agentd.d/mac.conf
UserParameter=net_mac[*],ifconfig $1|grep -oP '(?<=ether )\S+'

[root@localhost ~]# systemctl restart zabbix-agent.service
[root@localhost ~]# zabbix_get -s 127.0.0.1 -k net_mac[ens33] 测试验证是否可以掉取键值
00:0c:29:7f:06:ca

解释:
UserParameter定义名字
net_mac[*] 传递参数,从后面获取ens33、eth1、eth2等等

3、web页面显示检测mac原型

目前只是编写了如何取mac值方式,但是zabbix怎么调用。先创建监控原型,在系统自带的Network interface discovery创建监控原型。为什么:我们通过手动添加ens33后,命令zabbix_get -s 127.0.0.1 -k net_mac[ens33]才会返回数值,所以zabbix页面如何给你一个ens33,通过自带的[#IFNAME]。所以说白了。需要先配置我们应该先配置自动发现规则,规则中写入如何掉取你设备上有那些网卡信息,然后在规则中在建立一个规则,调用你上层规则的网卡信息名称后,把对应的mac显示出来

编写名称带变量,这样到时候就会显示ens33、eth1等。键值填写刚才脚本的net_mac[#IFNAME],可以理解为IFNAME代表网卡名字,后台通过zabbix_get -s 127.0.0.1 -k net_mac[ens33]获取mac。其中取出来的是字符串

4、解释自动发现规则

为什么我们呢配置监控项原型的时候要写:#IFNAME需要查看自动监控项原型的上一层 →自动发现规则。

自动发现规则其实也是一个规则,也是一个特殊的监控项,既然是监控项,通过命令可以查看

[root@localhost ~]# zabbix_get -s 127.0.0.1 -k net.if.discovery   返回json格式的信息
{"data":[{"{#IFNAME}":"lo"},{"{#IFNAME}":"ens33"}]}

思考:里面有ens33,还有lo,为什么监控项里面没有lo

点击

发现还有一个过滤器,把变量进行了过滤,他匹配了一个正则表达式。

思考:@Network interfaces for discovery在哪。在下面配置,Network interfaces for discovery →[Ll]o[0-9.]*$→[结果为假]     以Lo[0-9.]或者lo[0-9.]开头都是假的

思考:net.if.discovery   怎么就返回json格式的信息{"data":[{"{#IFNAME}":"lo"},{"{#IFNAME}":"ens33"}]}

写脚本

5.3、监控mysql多实例

实现原理:根据判断有多少个端口数,通过端口数分别监控对应多实例的状态

5.3.1、安装数据库,以zabbix server 10.4.7.3为例子

[root@localhost ~]#  yum install -y mariadb-server
[root@localhost ~]#  mv /etc/my.cnf /etc/my3307.cnf
[root@localhost ~]#  cp /etc/my3307.cnf /etc/my3308.cnf
[root@localhost ~]# cat /etc/my3307
[mysqld]
datadir=/date/3307/mysql
socket=/date/3307/mysql/mysql.sock
port=3307
symbolic-links=0
user=mysql

[mysqld_safe]
log-error=/date/3307/mariadb.log
pid-file=/date/3307/mariadb.pid

[root@localhost ~]#  cat /etc/my3308.cnf
[mysqld]
datadir=/date/3308/mysql
socket=/date/3308/mysql/mysql.sock
port=3308
symbolic-links=0
user=mysql

[mysqld_safe]
log-error=/date/3308/mariadb.log
pid-file=/date/3308/mariadb.pid

[root@localhost ~]# useradd mysql
[root@localhost ~]# groupadd mysql
[root@localhost ~]# mkdir -p /date/{3307,3308}
[root@localhost ~]# chown -R mysql:mysql /date/330*

初始化
[root@localhost ~]# mysql_install_db --user=mysql --defaults-file=/etc/my3307.cnf
[root@localhost ~]# mysql_install_db --user=mysql --defaults-file=/etc/my3308.cnf

启动
[root@localhost ~]# mysqld_safe --defaults-file=/etc/my3307.cnf &
[root@localhost ~]# mysqld_safe --defaults-file=/etc/my3308.cnf &
[root@localhost ~]# netstat -lntup|grep mysql
tcp        0      0 0.0.0.0:3306            0.0.0.0:*               LISTEN      1189/mysqld        
tcp        0      0 0.0.0.0:3307            0.0.0.0:*               LISTEN      84790/mysqld        
tcp        0      0 0.0.0.0:3308            0.0.0.0:*               LISTEN      85439/mysqld 

5.3.2、创建自动发现多实例脚本

[root@localhost ~]# mkdir -p /server/scripts
[root@localhost ~]# vim /server/scripts/mysql_discovery.sh                                                
#!/bin/bash 
#mysql low-level discovery 
res=$(netstat -lntp|awk -F "[ :\t]+" '/mysqld/{print$5}')
port=($res) 
printf '{' 
printf '"data":[' 
for key in ${!port[@]} 
do 
        if [[ "${#port[@]}" -gt 1 && "${key}" -ne "$((${#port[@]}-1))" ]];then 
                printf '{' 
                printf "\"{#MYSQLPORT}\":\"${port[${key}]}\"}," 
        else [[ "${key}" -eq "((${#port[@]}-1))" ]] 
                printf '{' 
                printf "\"{#MYSQLPORT}\":\"${port[${key}]}\"}" 
        fi 
done 
printf ']' 
printf '}\n'

注意:这个脚本是取你的端口号并以json格式输出

[root@web01 date]# bash /server/scripts/mysql_discovery.sh
{"data":[{"{#MYSQLPORT}":"3306"},{"{#MYSQLPORT}":"3307"},{"{#MYSQLPORT}":"3308"}]}

使用JSON格式转化化工具检查

解释脚本:

实现能够获取数据库端口
[root@web01 date]# netstat -lntp |awk '/mysqld/'    awk过滤只显示跟/mysqld/有关的
tcp        0      0 0.0.0.0:3307            0.0.0.0:*               LISTEN      12923/mysqld        
tcp        0      0 0.0.0.0:3308            0.0.0.0:*               LISTEN      13154/mysqld        
[root@web01 date]# netstat -lntp |awk '/mysqld/{print $0}'  awk过滤只显示跟/mysqld/有关的$0先不做过滤
tcp        0      0 0.0.0.0:3307            0.0.0.0:*               LISTEN      12923/mysqld        
tcp        0      0 0.0.0.0:3308            0.0.0.0:*               LISTEN      13154/mysqld    

awk -F "[ :\t]+" 对awk '/mysqld/'进行分隔,分隔符分别是空格、:、tab。+表示一个或多个,这里就表示一个或多个空格或冒号或tab
[root@web01 date]# netstat -lntp |awk -F "[ :\t]+" '/mysqld/{print $1}'
tcp
tcp
[root@web01 date]# netstat -lntp |awk -F "[ :\t]+" '/mysqld/{print $2}'
0
0
[root@web01 date]# netstat -lntp |awk -F "[ :\t]+" '/mysqld/{print $3}'
0
0
[root@web01 date]# netstat -lntp |awk -F "[ :\t]+" '/mysqld/{print $4}'
0.0.0.0
0.0.0.0
[root@web01 date]# netstat -lntp |awk -F "[ :\t]+" '/mysqld/{print $5}'
3307
3308

5.3.3、定义最外面自动发现规则键值key,到时候mysql.discovery就代表了{"data":[{"{#MYSQLPORT}":"3307"},{"{#MYSQLPORT}":"3308"}]}

[root@localhost ~]# vim /etc/zabbix/zabbix_agentd.d/mysql_discovery.conf
UserParameter=mysql.discovery,/bin/bash /server/scripts/mysql_discovery.sh
[root@localhost ~]# systemctl restart zabbix-agent.service

解释:
执行/server/scripts/mysql_discovery.sh,获取的数值赋予mysql.discovery

验证:

[root@localhost ~]# zabbix_get -s 127.0.0.1 -k mysql.discovery
(Not all processes could be identified, non-owned process info
 will not be shown, you would have to be root to see it all.)
{"data":[]}  需要一个root身份才能看

原因是用zabbix用户查看除了属于zabbix组下的启动进程外,无权查看别的分组,由于zabbix没有no shell,通过su 指定zabbix执行netstat -lntp后发现除了zabbix_agentd其他进程没法显示:

[root@localhost ~]# su -s '/bin/bash' -c "netstat -lntp" zabbix
(Not all processes could be identified, non-owned process info
 will not be shown, you would have to be root to see it all.)
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:3306            0.0.0.0:*               LISTEN      -                   
tcp        0      0 0.0.0.0:3307            0.0.0.0:*               LISTEN      -                   
tcp        0      0 0.0.0.0:3308            0.0.0.0:*               LISTEN      -                   
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      -                   
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      -                   
tcp        0      0 0.0.0.0:10050           0.0.0.0:*               LISTEN      33845/zabbix_agentd 
tcp        0      0 0.0.0.0:10051           0.0.0.0:*               LISTEN      -                   
tcp6       0      0 :::80                   :::*                    LISTEN      -                   
tcp6       0      0 :::22                   :::*                    LISTEN      -                   
tcp6       0      0 :::3000                 :::*                    LISTEN      -                   
tcp6       0      0 ::1:25                  :::*                    LISTEN      -                   
tcp6       0      0 :::10050                :::*                    LISTEN      33845/zabbix_agentd 
tcp6       0      0 :::10051                :::*                    LISTEN      -                   
[root@localhost ~]# 

解决方案:给/usr/bin//netstat 加一个超级管理员权限,让zabbix用户能够用root用户执行netstat

[root@localhost ~]# which netstat
/usr/bin/netstat
[root@localhost ~]# chmod +s /usr/bin//netstat 
[root@localhost ~]# zabbix_get -s 127.0.0.1 -k mysql.discovery
{"data":[{"{#MYSQLPORT}":"3306"},{"{#MYSQLPORT}":"3307"},{"{#MYSQLPORT}":"3308"}]}

5.3.4、创建自动发现规则键值key

创建模板

点击自动发现

名称随便,键值key需要定义:/etc/zabbix/zabbix_agentd.d/mysql_discovery.conf中的UserParameter=mysql.discovery

设置过滤器,让他不监控3306。(过滤器可有可无,如果在原有的基础上不修改)

5.3.5、设置正则表达式,配置过滤器,让他不监控3306,其他都检测。

5.3.6、设置监控项原型,配置到底要监控数据库多实例的那些参数

在官方自带监控的mysql脚本中,默认监控的3306

[root@localhost ~]# head -5 /etc/zabbix/zabbix_agentd.d/userparameter_mysql.conf    
# For all the following commands HOME should be set to the directory that has .my.cnf file with password information.

# Flexible parameter to grab global variables. On the frontend side, use keys like mysql.status[Com_insert].
# Key syntax is mysql.status[variable].
UserParameter=mysql.status[*],echo "show global status where Variable_name='$1';" | HOME=/var/lib/zabbix mysql -N | awk '{print $$2}'

解释:
1、UserParameter=mysql.status[*]调用状态

2、"show global status where Variable_name='$1';"  等价于mysql -e 外部命令查看mysql参数

[root@localhost ~]# mysql -uroot -p123456 -e "show global status"
+------------------------------------------+-------------+
| Variable_name                            | Value       |
+------------------------------------------+-------------+
| Aborted_clients                          | 1           |
| Aborted_connects                         | 2           |
| Access_denied_errors                     | 2           |
| Aria_pagecache_blocks_not_flushed        | 0           |
| Aria_pagecache_blocks_unused             | 15737       |
| Aria_pagecache_blocks_used               | 22          |
| Aria_pagecache_read_requests             | 3581        |
| Aria_pagecache_reads                     | 3           |
| Aria_pagecache_write_requests            | 209         |
| Aria_pagecache_writes                    | 0           |
| Aria_transaction_log_syncs               | 0           |
| Binlog_commits                           | 0           |
| Binlog_group_commits                     | 0           |
| Binlog_snapshot_file                     |             |
| Binlog_snapshot_position                 | 0           |

创建支持自定义传参的监控项,以mysql的是否正常为例:

[root@localhost ~]# vim /etc/zabbix/zabbix_agentd.d/mysql_discovery.conf
UserParameter=mysql.discovery,/bin/bash /server/scripts/mysql_discovery.sh
UserParameter=mysql.alive[*],mysqladmin -uroot -P $1 -h 127.0.0.1 ping 2>/dev/null |grep -c "alive"

[root@localhost ~]# systemctl restart zabbix-agent.service
[root@localhost ~]# zabbix_get -s 127.0.0.1 -k mysql.alive[3307]
1

解释:
[root@localhost ~]# mysqladmin -uroot -p123456 -P 3306 -h 127.0.0.1 ping |grep -c "alive"
1

[root@localhost ~]# systemctl stop mariadb
[root@localhost ~]# mysqladmin -uroot -p123456 -P 3306 -h 127.0.0.1 ping |grep -c "alive"
1
mysqladmin: connect to server at '127.0.0.1' failed
error: 'Can't connect to MySQL server on '127.0.0.1' (111)'
Check that mysqld is running on 127.0.0.1 and that the port is 3306.
You can check this by doing 'telnet 127.0.0.1 3306'
0

停止数据库后会弹出乱七八糟的,把报错的提示删除2>/dev/null
[root@localhost ~]# mysqladmin -uroot -p123456 -P 3306 -h 127.0.0.1 ping 2>/dev/null |grep -c "alive"
0


  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Zabbix OID代表Zabbix对象标识符(Object Identifier),它是一种用于在Zabbix监控系统中唯一标识网络设备和资源的标识符。 在Zabbix中,每个网络设备和资源都可以通过OID进行标识。OID是一串数字序列,它具有层次结构,类似于文件系统的路径。每一级OID都代表特定的网络设备或资源类型。 Zabbix OID用于识别网络设备和资源的各个方面,如处理器负载、内存使用、网络流量等。通过使用OID,我们可以在Zabbix中收集和监视这些设备和资源的指标数据。 在Zabbix中,OID通常与SNMP(Simple Network Management Protocol)一起使用。SNMP是一种用于管理网络设备的协议,在Zabbix中,它允许我们通过OID获取和监控这些设备的信息。 要使用Zabbix OID,首先需要确定要监控的设备或资源的OID。通常,设备制造商提供了OID的文档或参考手册,我们可以在其中找到设备的OID。然后,我们需要在Zabbix中配置SNMP监控,指定设备的OID以及获取数据的频率。 一旦配置完成,Zabbix将通过SNMP使用OID来定期获取设备的指标数据。这些数据将用于生成报表、图形和警报,以便我们可以对设备状态进行监控和管理。 总结而言,Zabbix OID是一种用于在Zabbix中唯一标识网络设备和资源的标识符。它与SNMP一起使用,用于获取设备的指标数据。通过使用OID,我们可以在Zabbix中实现对网络设备和资源的全面监控和管理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值