Zabbix

Zabbix简介:

Zabbix是一款监控软件,用于监控linux服务器,是当下最热门的服务器监控解决方案。其监控方式可分为:客户端,SNMP,JMX(JAVA虚拟机监控),IPMI(服务器硬件监控),一般情况下客户端监控比较常见,也就是在需要监控的主机上安装zabbix_agent程序,服务器端定时去向客户端拉取数据。当然除了服务器拉取客户端的数据以外,客户端也可以定时主动把数据推向服务器,这样在监控主机过多时可以缓解服务器端的压力,这种模式被称为主动模式。

Zabbix在使用C/S架构进行监控时,此时需要用到的组件有:zabbix-server,zabbix-agent,zabbix-gui(提供图形管理页面)。由于zabbix-server和gui需要用到数据库,而gui管理页面本身基于php。所以在部署时还需要安装mysql(or other sql)和php-fpm。而snmp主要用于无法安装agent端的设备,例如路由器,交换机等,但因其snmp是TCP/IP二层协议,一般都支持snmp,便可用这种方式监控。

zabbix安装:

zabbix依赖:

web服务器+php+数据库:

nginx(apache)+php+mysql(other sql)

zabbix分为服务器端,客户端,gui(web端),如果监控的主机较多,还会用到proxy端(分布式监控)

一般安装分为两种方式源码和rpm,还有一种是docker

源码安装:

https://www.zabbix.com/download_sources 下载源码包

tar -zxvf zabbix-5.2.0.tar.gz

创建用户帐号:

groupadd –system zabbix

useradd –system -g zabbix -d /usr/lib/zabbix -s /sbin/nologin -c “Zabbix Monitoring System” zabbix

创建家目录

mkdir -m u=rwx,g=rwx,o= -p /usr/lib/zabbix

chown zabbix:zabbix /usr/lib/zabbix

安装:

依赖安装:

yum -y install curl-devel libevent-devel net-snmp-devel mysql-devel

要查看所有受支持的配置选项,请在提取的Zabbix源目录中运行:

./configure –help

要为Zabbix服务器和代理配置源,您可以运行以下命令:

./configure –enable-server –enable-agent –with-mysql –enable-ipv6 –with-net-snmp –with-libcurl –with-libxml2

要为Zabbix服务器(使用PostgreSQL等)配置源,可以运行:

./configure –enable-server –with-postgresql –with-net-snmp

要配置Zabbix代理的源(使用SQLite等),可以运行:

./configure –prefix=/usr –enable-proxy –with-net-snmp –with-sqlite3 –with-ssh2

要为Zabbix代理配置源,可以运行:

./configure –enable-agent

或者,对于Zabbix代理2:

./configure –enable-agent2

编译Zabbix代理2需要Go版本1.13或更高版本。有关安装说明,请参阅golang.org。

官方文档:https://www.zabbix.com/documentation/current/manual/installation/install

我这里agent和server都在一台服务器,就使用参数安装:

./configure –enable-server –enable-agent –with-mysql –enable-ipv6 –with-net-snmp –with-libcurl –with-libxml2 –prefix=/usr/local/zabbix

导入数据库

#先安装好mysql

shell> mysql -uroot -p

mysql> create database zabbix character set utf8 collate utf8_bin;

mysql> create user ‘zabbix‘@’localhost’ identified by ‘’;

mysql> grant all privileges on zabbix.* to ‘zabbix‘@’localhost’;

mysql> quit;

shell> cd database/mysql

shell> mysql -uzabbix -p zabbix < schema.sql

stop here if you are creating database for Zabbix proxy

shell> mysql -uzabbix -p zabbix < images.sql

shell> mysql -uzabbix -p zabbix < data.sql

这几个文件在源码包的database/mysql里面,路径应为

zabbix-5.2.5/database/mysql

非mysql请参考官方文档:https://www.zabbix.com/documentation/current/manual/appendix/install/db_scripts

导入好数据库以后此时可以将zabbix配置文件指定到数据库就可以启动了

zabbix_agent.conf:

一般agent只用指定server和serveractive即可

但是如果server和agent位于同一服务器也不用设置,应其默认为127.0.0.1

(这里的serveractive是zabbix——agent主动模式的服务器地址)

zabbix_server.conf:

DBHost=192.168.34.136

DBName=zabbixnew

DBUser=root

DBPassword=admin

配置完就可以启动zabbix_agent和zabbix_server了

./sbin/zabbix_agentd

./sbin/zabbix_server

如启动有问题可以看日志,默认编译安装应在/tmp/zabbix_agentd(server).conf

也可以将zabbix写入systemd配置文件用systemctl启动

/usr/lib/systemd/system/zabbix-server.service

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
[Unit]

Description=Zabbix Server

After=syslog.target

After=network.target

After=mysql.service

After=mysqld.service

After=mariadb.service

After=postgresql.service

After=pgbouncer.service

After=postgresql-9.4.service

After=postgresql-9.5.service

After=postgresql-9.6.service

After=postgresql-10.service

After=postgresql-11.service

After=postgresql-12.service

[Service]

Environment="CONFFILE=/etc/zabbix/zabbix_server.conf"

EnvironmentFile=-/etc/sysconfig/zabbix-server

Type=forking

Restart=on-failure

PIDFile=/run/zabbix/zabbix_server.pid

KillMode=control-group

ExecStart=/usr/sbin/zabbix_server -c $CONFFILE

ExecStop=/bin/kill -SIGTERM $MAINPID

RestartSec=10s

TimeoutSec=0

[Install]

WantedBy=multi-user.target

/usr/lib/systemd/system/zabbix-agent.service

[Unit]

Description=Zabbix Agent

After=syslog.target

After=network.target

[Service]

Environment="CONFFILE=/etc/zabbix/zabbix_agentd.conf"

EnvironmentFile=-/etc/sysconfig/zabbix-agent

Type=forking

Restart=on-failure

PIDFile=/run/zabbix/zabbix_agentd.pid

KillMode=control-group

ExecStart=/usr/sbin/zabbix_agentd -c $CONFFILE

ExecStop=/bin/kill -SIGTERM $MAINPID

RestartSec=10s

User=zabbix

Group=zabbix

[Install]

WantedBy=multi-user.target

zabbix-agent和server启动完后还差一个必要的组件,zabbix-gui,也就是zabbix的管理图形界面

因是基于php编写的,所以这里还需要搭建一个nginx(apache)+php-fpm

yum -y install nginx php-fpm

其前端文件位于编译安装包根目录下的ui路径下面

nginx:conf.d/zabbix.conf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
upstream php-fpm {
server unix:/run/php-fpm/www.sock;
}
server {
listen 81;
server_name localhost;

root /usr/local/zabbix/ui;

index index.php;

location = /favicon.ico {
log_not_found off;
}

location / {
try_files $uri $uri/ =404;
}

location /assets {
access_log off;
expires 10d;
}

location ~ /\.ht {
deny all;
}

location ~ /(api\/|conf[^\.]|include|locale) {
deny all;
return 404;
}

location ~ [^/]\.php(/|$) {
fastcgi_pass unix:/run/php-fpm/zabbix.sock;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_index index.php;

fastcgi_param DOCUMENT_ROOT /usr/local/zabbix/ui;
fastcgi_param SCRIPT_FILENAME /usr/local/zabbix/ui$fastcgi_script_name;
fastcgi_param PATH_TRANSLATED /usr/local/zabbix/ui$fastcgi_script_name;

include fastcgi_params;
fastcgi_param QUERY_STRING $query_string;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;

fastcgi_intercept_errors on;
fastcgi_ignore_client_abort off;
fastcgi_connect_timeout 60;
fastcgi_send_timeout 180;
fastcgi_read_timeout 180;
fastcgi_buffer_size 128k;
fastcgi_buffers 4 256k;
fastcgi_busy_buffers_size 256k;
fastcgi_temp_file_write_size 256k;
}
}

此处官方提供的配置文件在匹配到.php时是跳转到

unix:/run/php-fpm/zabbix.sock;

说明此处php-fpm应将其sock文件放置于此,

/etc/php-fpm.d/zabbix.conf:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
[zabbix]

user = apache

group = apache

listen = /run/php-fpm/zabbix.sock

listen.acl_users = apache,nginx

listen.allowed_clients = 127.0.0.1

pm = dynamic

pm.max_children = 50

pm.start_servers = 5

pm.min_spare_servers = 5

pm.max_spare_servers = 35

php_value[session.save_handler] = files

php_value[session.save_path] = /var/lib/php/session

php_value[max_execution_time] = 300

php_value[memory_limit] = 128M

php_value[post_max_size] = 16M

php_value[upload_max_filesize] = 2M

php_value[max_input_time] = 300

php_value[max_input_vars] = 10000

php_value[date.timezone] = Asia/Shanghai

配置完启动即可

systemctl start nginx

systemctl start php-fpm

Yum安装:

zabbix安装

rpm -Uvh https://repo.zabbix.com/zabbix/5.0/rhel/8/x86_64/zabbix-release-5.0-1.el8.noarch.rpm

yum makecache

yum -y install zabbix-server-mysql zabbix-web-mysql zabbix-nginx-conf zabbix-agent

创建初始数据库

确保您已启动并运行数据库服务器。

在数据库主机上运行以下命令mysql -uroot -p

password

mysql> create database zabbix character set utf8 collate utf8_bin;

mysql> create user zabbix@localhost identified by ‘password’;

mysql> grant all privileges on zabbix.* to zabbix@localhost;

mysql> quit;

zcat /usr/share/doc/zabbix-server-mysql*/create.sql.gz | mysql -uzabbix -p zabbix

为Zabbix服务器配置数据库

编辑文件/etc/zabbix/zabbix_server.conf

DBPassword=password

为Zabbix前端配置PHP

编辑文件/etc/nginx/conf.d/zabbix.conf,取消注释并设置’listen’和’server_name’指令。

listen 80;

server_name example.com;

编辑文件/etc/php-fpm.d/zabbix.conf,取消注释并为您设置正确的时区。

; php_value[date.timezone] = Europe/Riga

F。启动Zabbix服务器和代理进程

启动Zabbix服务器和代理进程,并使其在系统启动时启动。

systemctl restart zabbix-server zabbix-agent nginx php-fpm

systemctl enable zabbix-server zabbix-agent nginx php-fpm

zabbix官网:

https://www.zabbix.com/

装完可能遇到的问题:

1.zabbix连不上数据库(检查数据库是不是utf8-bin)

2.设置里面不能改为中文:

zabbix前端inculde/locales.inc.php中的中文是否为ture

locale -a 中是有中文字码

3.zabbix图形中中文显示乱码

从windows中找到字体c:\windows\fonts

找到linux例zabbix的字体路径(/usr/local/zabbix/ui/assets/fonts

默认路径)

find / -name “fonts

[root@localhost fonts]# ll

总用量 0

lrwxrwxrwx 1 root root 33 3月 1 03:50 graphfont.ttf -> /etc/alternatives/zabbix-web-font

cd /etc/alternatives/

[root@localhost alternatives]# ll zabbix-web-font

lrwxrwxrwx 1 root root 38 3月 1 03:50 zabbix-web-font -> /usr/share/fonts/dejavu/DejaVuSans.ttf

cd /usr/share/fonts/dejavu/

将文件导入,备份源文件,然后将新文件改成这个名字

[root@localhost dejavu]# mv DejaVuSans.ttf DejaVuSans.ttf.bak

[root@localhost dejavu]# mv MSJH.TTC DejaVuSans.ttf

监控主机:

监控软件本身的主要作用的就是监控主机,在zabbix中,默认的第一个监控的主机为127.0.0.1:10050如agent在本地正常安装运行了以后,首次登陆gui就能看到本机的监控信息。

zabbix监控主机有几种模式:

agent,snmp,jmx,ipmi

agent:

一般情况是agent,即在需要被监控的主机端上装入客户端工具,然后与server端连接就可以进行监控了。

agent监控有两种模式:

主动模式,被动模式

Zabbix 被动模式: Server 向 agent 请求获取监控项的数据, agent 返回数据。

Server 打开一个 TCP 连接, Server 发送请求 agent.ping, Agent 接收到请求并

且响应, Server 处理接收到的数据。

Zabbix 主动模式: Agent 主动请求 server 获取主动的监控项列表,并主动将监

控项内需要检测的数据提交给 server/proxy。 zabbix agent 首先向

ServerActive 配置的 IP 请求获取 active items,获取并提交 active tiems 数

据值 给server 或者 proxy;

Agent监控:

1.agent端配置

首先在需要监控的主机上安装agent端,安装见上zabbix安装。

然后再zabbix_agentd.conf中配置:

Server=127.0.0.1 #指定服务器ip地址

默认是被动模式,客户端只需设置这个

完成以后启动客户端即可

2.zabbix-gui配置

再管理页面中添加主机

image.png

指定其ip地址和端口,默认端口10050,链接上模板

image.png

image.png

然后就添加完成了,右方ZBX为绿色表示可用

agent监控方式也是被动模式,是默认的监控方式

主动模式:

主动模式修改zabbix_agent的配置文件

首先是StartAgents=0 这里默认为3,修改为0以后将不再监听端口。(server注不注释无所谓,主要是这里要配置为0)

然后是ServerActive=127.0.0.1,这里的ip地址得指定成server端的ip地址

这两个配置完毕以后主动模式就完成了,但还有一步是zabbix-gui中的监控项必须要设置成主动模式才会主动推送数据。

这里首先选择一个模板:

image.png

为避免改了以后无法改回来,因克隆一个模板(这里克隆的模板必须是独立的模板而非链接其他模板的模板,否则不能更改其监控项的设置)

克隆完以后全选其监控项,点击批量更新

image.png

image.png

类型设置为zabbix客户端主动式,设置一个更新间隔。

然后在主机中加入该模板

image.png

这个时候主动模式的监控就已经配置完毕,在主机-可用性中可以看到

image.png

其可用性非绿色,也就是zabbix-server无法找到客户端(因其客户端本身也不再监听端口)

此时可以在最新数据中看到

image.png

Snmp监控:

Snmp为简单网络管理协议,一般用在路由器,交换机之类的设备上,因这些设备本身无法安装监控客户端,则可以通过该协议监控其数据。

image.png

JMX:

JMX(Java Management Extensions)是一个为应用程序植入管理功能的框架。JMX是一套标准的代理和服务,

实际上,用户可以在任何Java应用程序中使用这些代理和服务实现管理。主要用于对JAVA应用程序和JVM进行监控和管理。

JConsole和JVisualVM中能够监控到JAVA应用程序和JVM的相关信息都是通过JMX实现的。

这里我监控的是tomcat,首先在启动脚本(catalina.sh)中加入变量

CATALINA_OPTS=’-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=8888 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false’

改完需重启tomcat

启用jmx并监听其端口

首先我们需要了解一下他们的对应关系,zabbix_server开启java poller, zabbx_java开启JavaGateway,端口为10052,Tomcat JMX开启12345提供性能数据。

数据获取:java poller<–>JavaGateway:10052<–>Tomcat:12345.

此时tomcat配置完了,然后配置zabbix_java

./configure –prefix=/usr/local/zabbix –enable-java && make install #编译安装zabbix_java模块

cd /usr/local/zabbix/sbin

./startup

image.png

启动以后zabbix监听客户端就配置完毕了,然后再zabbix_server配置文件里面找到这三个选项并指定为刚才配置好的jmx服务器的地址和端口

JavaGateway=10.10.10.223

Option: JavaGatewayPort

Port that Zabbix Java gateway listens on.

Mandatory: no

Range: 1024-32767

Default:

JavaGatewayPort=10052Option: StartJavaPollers

Number of pre-forked instances of Java pollers.

Mandatory: no

Range: 0-1000# Default:

StartJavaPollers=6

最后一步在zabbix gui里面添加jmx监控主机:

image.png

指定其类型为jmx,IP地址,以及jmx的端口 号

image.png

然后再指定其监控模板(监控项)

image.png

完毕以后jmx为绿色即成功监控。

IPMI:

IPMI(Intelligent PlatformManagement Interface)即智能平台管理接口是使硬件管理具备“智能化”的新一代通用接口标准。用户可以利用 IPMI 监视服务器的物理特征,如温度、电压、电扇工作状态、电源供应以及机箱入侵等。Ipmi 最大的优势在于它是独立于 CPU BIOS 和 OS 的,所以用户无论在开机还是关机的状态下,只要接通电源就可以实现对服务器的监控。

IPMI跳过

配置:

主机群组:

主机群组是给主机以及模板进行分类的

image.png

在创建主机或模板时都需指定其主机群组。

监控模板:

系统模板:

监控了主机以后首先应配置主机的监控项,监控模板就是一系列监控项的合集,也是zabbix自带监控项的合集。

比如我这里选择了

image.png

Zabbix agent模板,然后其应用集,监控项,触发器就都有了,都是基于该模板。

image.png

但本身监控模板也可以不提供任何监控项,其所有监控项均为链接其他的模板,由其他模板提供,以linux by zabbix agent 为例子,它做为模板本身没有任何应用集监控项,全是链接其它模板,相当于其他模板的整合模板。

image.png

这种链接模板优点是可以做为多模板的合集,缺点是无法直接在该模板里面对其监控项触发器进行编辑,可以看到这里监控项的可编辑区域均为灰色(无法编辑)。

image.png

自定义模板:

在配置-模板的右上角有个创建模板

image.png

创建时需输入模板名称与主机群组

如不链接模板则输入完成后直接点添加

image.png

创建完成后可创建监控项应用集触发器。

应用集

应用集是监控项的的集合,用来归类监控项,一个应用集下面包含多个监控项。

主要作用就是归类,方便按类别查找模板里面的监控项。

监控项

一个模板(主机)最重要的就是监控项,用于监控系统里面各个指标情况

默认一个模板也会包含n个监控项。在监控项右上角可以添加监控项

添加监控项界面:

image.png

image.png

监控项最重要的指标就是键值,也就是监控项的数据来源,在选择中通过类型筛选可以找到很多系统自带的键值。除减值外其他设置都可以视情况而定,例如查看值指的是当监控项为某值时对应的监控系统状态,例如监控一个应用是否正常运行,一般就有两个状态0和1,代表运行和关闭。

这是系统自带的查看值:

image.png

自定义监控

如使用系统自带的键值则是zabbix自带的监控项,但也可自定义监控项。

例如我这里要手动监控nginx的状态:

首先再zabbix_agent端的zabbixagent.conf修改配置

Include=/usr/local/zabbix/etc/zabbix_agentd.conf.d/*.conf(也可以直接将自定义监控项键值写道主配置文件,但一般不会这么做)

UnsafeUserParameters=1 UserParameter接受所有传递的参数(建议开启,有的监控脚本需要传递参数)

[root@www etc]# cat zabbix_agentd.conf.d/nginx.conf

UserParameter=nginx,ps -ef |grep -v grep |grep nginx |grep master >/dev/null ;echo $?

配置完重启zabbixagent端

设置完以后可以先再zabbix_agent客户端使用zabbix_get测试一下

image.png

测试没有问题便可以添加配置项了,键值为nginx

image.png

然后在最新数据里面找到该监控项(nginx)

image.png

已经有数据了。

触发器

触发器本身基于监控项,起作用为触发报警。当一个监控项的数据到达某个阈值后,触发器便会触发。

下面创建一个触发器:

模板-触发器-创建触发器

image.png

表达式:image.png

image.png

触发器创建完毕后关闭nginx

image.png

首页便有触发器报警了,但这里写了恢复表达式,所以再nginx启动后,该报警就自动移除了。

图形

正常情况下在添加了监控项以后都会有自带的图形监控显示功能,在最新数据里面就能可以,也可以在模板中把图形添加好

image.png

但这个的添加图形无非是定义一下图形颜色风格类别等,或者将多个监控项集成于一图形(个人觉得图形非监控必要模块,作用不大),添加界面如下image.png

添加完成后在监测-主机-图形里可以看到

自动发现规则

web监控

Web检测是用于监控web应用,主要检测项有web网页反应时间,响应码。

在模板-web场景中添加web检测

image.png

设置其更新间隔,尝试次数以及检测时访问的客户端。

然后在步骤里面添加要检测的weburl,选择跟随跳转,指定其状态码为200

image.png

添加以后可以最新数据中看到其最新数据以及图形监控

image.png

其监控项一共有五个:

Response time for step “soloblog” of scenario “soloblog”.(响应时间)

Response code for step “soloblog” of scenario “soloblog”.(响应码)

Last error message of scenario “soloblog”.(上一条错误信息)

Failed step of scenario “soloblog”. (响应失败)

Download speed for step “soloblog” of scenario “soloblog”.(响应速度)

Download speed for scenario “soloblog”.(响应速度)

有了监控项后可以对其进行设置触发器,网上一般会对其响应码做设置,但不知是不是版本的原因,我在本地照着网上的触发器设置并关闭触发的web网站后并无法触发,后发现其原因为响应码监控项在web项目无法访问时不能生成任何数据,也就是无法生成200以外的数据,则无法对其监控

响应时间,响应码,响应速度(Download speed for step “soloblog” of scenario “soloblog”.)均无法在web项目关闭时生成任何数据,所以也无法对这三项进行触发器触发操作。

下面是web项目关闭时其web检测数据:

image.png

这里可以对其响应失败码和响应速度进行触发,添加触发器:

image.png

在关闭web项目就可以看到触发器触发警报了:

image.png

仪表盘

仪表盘和首页-仪表板类似,就是展示图形数据趋势图或者文本数据等相关信息的展示页面。

在模板-仪表盘里面可以定义:

模板-仪表盘-添加仪表盘

image.png

这是添加仪表盘界面,在空白处任意位置点击可以添加。

主机:

主机里面可以配置以及记录了zabbix监控的所有客户端

右上角可以创建主机,应用集到web检测这几项可以点击进去创建,但一般都基于模板套用,无需手动创建,如果设置了代理程序,在agent代理程序会显示,点击状态可以切换开启或关闭,可用性为绿色表示可用以及显示了其agentd端的监控类型。

image.png

IPMI为监控硬件选项,可以在ipmi选项卡中指定其用户名和密码

image.png

标记为主机的标记或备注信息

image.png

宏:

主机资产记录配置过以后可以在资产记录中看到

image.png

加密:

Zabbix版本从3.0之后,开始支持Zabbix server, Zabbix proxy, Zabbix agent, zabbix_sender and zabbix_get之间的通信加密,加密方式有预共享密钥(PSK)和证书加密。加密配置是可选项,一些proxies和agents可以使用证书认证加密通信,另外一些可以使用PSK加密通信,而剩余的可以不使用加密进行通信。

加密需编译时加入加密编译项,可通过密钥生成器生成密钥然后在zabbixagent配置文件中指定其密钥文件,最后在主机-加密中添加。

维护:

维护中可以定义其主机群组(主机)的维护时间,在维护时间内,主机监控项的触发器不会进行触发警,但如果维护时间过后仍未解决,zabbix会触发报警。

image.png

处于维护期间的主机:

image.png

动作:

分为

Trigger actions,discovery actions,autoregistration actions,internal actions.

Trigger actions:

Trigger actions最主要的作用是为触发器触发一个动作,触发器设置监控项的监控数据到达某个阈值时,会进行触发报警,但仅仅是在zabbix-gui面板上进行报警,而动作功能在触发器触发时进行邮件报警或恢复操作(执行命令)。

邮件报警:

首先设置好动作,动作的类型可以为多个,这里主要是设置其动作触发的条件,条件可以为多个,其计算方式一般是与/或和“和”:

image.png

image.png

这个我设置了

|
触发器示警度 大于等于 警告 主机 等于 192.168.34.136 |
| - |

两个条件,计算方式是和

则在主机192.168.34.136的触发器警示度大于等于警告时,则会触发动作,接下来设置其动作。其动作有两种:发送消息和远程命令,发送消息也就是邮件报警或者钉钉(短信)等多种报警方式的实现,远程命令一般适用于其动作为某单个触发器时对其监控项进行命令恢复操作。

image.png

其动作设置了在触发器触发和恢复时通过email发给admin用户,其实也就是发送email给对应用户,这里需要额外设置两个东西,发送邮件的发件人设置,收件人设置。

发件人设置在其管理-报警媒介类型中:

这里是email报警,就选择email进行设置

image.png

发件邮箱为163邮箱,需要网易邮箱中开启stmp服务,并获得其授权码,在这密码也非用户密码,而是授权码。Stmp输入其邮箱服务商对应的地址,电邮和用户名称皆为用户名

image.png

Message templates:

这里可以设置报警时发送邮件的格式zabbix默认设置了五种邮件类型的模板,最常用的应该是问题。编辑可以更改

image.png

image.png

将其改为

image.png

然后更新确定

发件邮箱设置好以后在设置收件邮箱 user settings-报警媒介里面添加一个报警媒介,设置其收件人(邮箱)。

image.png

设置完以后就可以进行邮件报警了。这里192.168.34.136有一个触发器为监控nginx状态,为测试这里关闭nginx。关闭以后可以在主页仪表盘看到触发器以及其执行的动作image.png

这时登录邮箱可以看到该邮件

image.png

Discovery actions:

自动发现的动作首先需要设置自动发现,当自动发现根据其设置发现到主机时,才能触发discovery actions,也就是自动发现动作。

自动发现:

其配置项位于 配置-自动发现。下面是自动发现添加中需要定义的配置项

image.png

IP范围:自动发现需要定义一个ip范围,其扫描的时候也只扫描该范围中的ip段。

更新间隔:更新间隔意味每隔多久会进行扫描一次,这个时间建议不要太短,太短的话其扫描操作会长期占用系统大部分资源,这里为了测试方便就设置了10秒

检查:ip扫描作为第一个筛选规则,而检查就是其第二个筛选规则,下面是其检查类型,这里我设置了检查类型为zabbix客户端,其键值为system.uname(linux客户端名称的键值)

image.png

设备唯一准则性,主机名称,可见的名称根据需求设置即可,因其本身见名知意,这里也不在解释。

自动发现设置完毕以后会在网端内定期扫描,扫描到以后的主机信息可以在检测-自动发现中看到

image.png

此时就可以设置自动发现的动作了。

image.png

首先是其条件,一般来说自动发现状态为up即可,也可根据情况设置多个条件。

然后是其动作image.png

这里设置了四个动作:添加主机,添加到主机群组,链接其模板,启用主机。

动作设置完成以后,此时当zabbix-server检测的自动发现检测到主机以后就会自动添加主机并链接其模板。

Autoregistration actions:

自动注册规则本质上实现的功能与自动发现一样,都是通过自动化功能添加监控zabbix-agent端,不一样的是自动发现是通过zabbix-server去扫描指定网段的客户端,而自动注册是zabbix-agent主动注册到server端。后者的优势在于自动注册无需指定网段,在局域网网络较为复杂或者互联网实现监控时可以用到。

首先是在zabbix-agent的配置文件上进行配置:

在需要被监控的主机上安装好agent端,然后编辑zabbix_agent.conf。

Zabbix_agent.conf:

1
2
3
4
5
6
7
Server=10.10.10.187(这个非自动注册用到的配置项,而是监控时需指定的serverip)ServerActive=10.10.10.187(设置主动注册的serverip)

Hostname=ysw1450 (注册时设置的主机名称,正常使用时这个也应当是zabbixagent的名称)

HostMetadata=admin145 (注册时的主机元数据)

HostMetadataItem=system.uame (也是元数据)

这样,您可以确保主机元数据包含“Linux”或“Windows”,具体取决于运行代理的主机。 在这种情况下主机元数据的示例:

Linux: Linux server3 3.2.0-4-686-pae #1 SMP Debian 3.2.41-2 i686 GNU/Linux

Windows: Windows WIN-0PXGGSTYNHO 6.0.6001 Windows Server 2008 Service Pack 1 Intel IA-32

我感觉HostMetadataItem和HostMetadata设置一个即可,如设置HostMetadataItem的话就在配置页面主机元数据那里写上linux(windows),如果是HostMetadata的话就对其字符串进行匹配。也可以一起设置。

配置好以后转到zabbix_gui上的自动注册添加,主机名对应hostname,主机元数据对应HostMetadata

image.png

然后设置其动作(和自动发现一样)

image.png

添加以后启动zabbixagent然后看gui就已经注册了。

image.png

Internal actions:

内部动作主要是根据事件类型来做动作。

image.png

在事件类型触发以下条件时就可以做出动作(发送信息)。

但我觉得这个用的少,且本身监控项触发器在事件类型报告为未知的情况并不常见。

关联项事件:

钉钉报警:

钉钉创建群机器人

首先在钉钉里面创建一个群,然后再创建一个机器人并拿到其webhook

image.png

在linux中创建脚本

vim /usr/lib/zabbix/alertscripts/dingding.sh

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#!/bin/bash
to=$1
subject=$2
text=$3

#此处的 xxxxx 就是刚刚复制存留的 api 接口地址。
curl -i -X POST \
'https://oapi.dingtalk.com/robot/send?access_token=XXX' \
-H 'Content-type':'application/json' \
-d '
{
"msgtype": "text",
"text": {
"content": "'监控报警:''"$text"'"
},
"at":{
"atMobiles":[
"'"$1"'"
],
"isAtAll":false
}
}'

chmod +x dingding.sh

测试脚本是否执行成功。
sh dinhding.sh 11 22 33

此时应该能在钉钉群里看到机器人发送消息

在zabbix中添加报警媒介

image.png

参数:

{ALERT.SENDTO}

{ALERT.SUBJECT}

{ALERT.MESSAGE}

message templates:

image.png

主题:

故障{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}

触发器动作中加入钉钉报警

image.png

给admin添加钉钉报警媒介

image.png


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!