Zabbix 是一个企业级的分布式开源监控方案。

Zabbix是一款能够监控各种网络参数以及服务器健康性和完整性的软件。Zabbix使用灵活的通知机制,允许用户为几乎任何事件配置基于邮件的告警。这样可以快速反馈服务器的问题。
Zabbix支持主动轮询和被动捕获。Zabbix所有的报告、统计信息和配置参数都可以通过基于Web的前端页面进行访问。基于Web的前端页面可以确保您从任何方面评估您的网络状态和服务器的健康性。

zabbix组件
Zabbix server是整个Zabbix软件的核心程序。
Server通过轮询和捕获数据,计算是否满足触发器条件,向用户发送通知。是agent程序报告系统可用性、系统完整性和统计数据的核心组件,是所有配置信息、统计信息和操作数据的核心存储器。

数据库存储:所有配置信息和Zabbix收集到的数据都被存储在数据库

web界面:为了从任何地方和任何平台都可以轻松的访问Zabbix, 提供基于Web的Zabbix界面。该界面是Zabbix Server的一部分,通常(但不一定)跟Zabbix Server运行在同一台物理机器上。

Zabbix proxy: 可以替Zabbix Server收集性能和可用性数据。

Proxy代理服务器:是Zabbix软件可选择部署的一部分,也可以帮助单台Zabbix Server分担负载压力。

Zabbix agents监控代理: 部署在监控目标上,能够主动监控本地资源和应用程序,并将收集到的数据报告给Zabbix Server。

zabbix的常用术语
host(主机):一台想要监控的网络设备,用ip和域名表示。
host group (主机组):主机的逻辑组;它包含主机和模板。一个主机组里的主机和模板之间并没有任何直接的关联。通常在给不同用户组的主机分配权限时候使用主机组。
item(监控项):接收的主机的特定数据,一个度量数据。
trigger(触发器):一个被用于定义问题阈值和“评估”监控项接收到的数据的逻辑表达式;当接收到的数据高于阈值时,触发器从“OK”变成“Problem”状态。当接收到的数据低于阈值时,触发器保留/返回一个“OK”的状态。
event(事件):单次发生的需要注意的事情,例如触发器状态改变或发现有监控代理自动注册。
problem(异常):一个处在“异常”状态的触发器。
action(动作):一个对事件做出反应的预定义的操作。一个动作由操作(例如发出通知)和条件(当时操作正在发生)组成。
escalation(升级): 一个在动作内执行操作的自定义场景; 发送通知/执行远程命令的序列。
media(媒介): 发送告警通知的手段;告警通知的途径。
notification(通知):利用已选择的媒体途径把跟事件相关的信息发送给用户。
remote command(远程命令):一个预定义好的,满足一些条件的情况下,可以在被监控主机上自动执行的命令。
template(模板):一组可以被应用到一个或多个主机上的实体(监控项,触发器,图形,聚合图形,应用,LLD,Web场景)的集合;模版的任务就是加快对主机监控任务的实施;也可以使监控任务的批量修改更简单。模版是直接关联到每台单独的主机上。
application(应用):一组监控项组成的逻辑分组。
web scenario(web 场景):利用一个或多个HTTP请求来检查网站的可用性。
frontend(前端): Zabbix提供的web界面。
zabbix API: Zabbix API允许你使用JSON RPC协议来创建、更新和获取Zabbix对象(如主机、监控项、图形和其他)信息或者执行任何其他的自定义的任务。
zabbix server: Zabbix软件实现监控的核心程序,主要功能是与Zabbix proxies和Agents进行交互、触发器计算、发送告警通知;并将数据集中保存等。
zabbix agent:一个部署在监控对象上的,能够主动监控本地资源和应用的程序。
zabbix proxy:一个帮助Zabbix Server收集数据,分担Zabbix Server的负载的程序。

zabbix 工作原理

zabbix-server,mysql数据库,zabbix-web gui是可以分布安装在不同服务器,zabbix-server启动时读取配置文件
zabbix_server.conf来运行zabbix-server服务并且将日志输出到zabbix-server.log文件;zabbix-serevr通过主动模式或者被动模式获取数据,zabbix-agent服务器启动时会读取配置文件zabbix-agent.conf输出日志到配置文件zabbix-agent.log;zabbix-server服务通过zabbix-web gui从数据库提取数据绘制图形在浏览器里面进行展示;

zabbix收集数据分为主动和被动两种模式:

被动模式:zabbix-server服务主动请求zabbix-agent服务,zabbix-service通过zabbix-get方式获取zabbix-agent端的数据;

主动模式:zabbix-agent主动将收集的数据定时通过zabbix-sender进程将数据发送给zabbix-server服务并且存储在本地数据库

zabbix安装方法
zabbix官方的源码库安装方法

官方源码库地址:http://repo.zabbix.com/

1.安装源码库配置部署包。包含了yum配置文件:

[root@localhost ~]# cat /etc/redhat-release 
CentOS Linux release 7.5.1804 (Core)
[root@localhost ~]# wget http://repo.zabbix.com/zabbix/3.4/rhel/7/x86_64/zabbix-release-3.4-1.el7.centos.noarch.rpm
[root@localhost ~]# rpm -ivh zabbix-release-3.4-1.el7.centos.noarch.rpm
1
2
3
4
2.安装部署包:

[root@localhost ~]# yum install zabbix-server-mysql zabbix-web-mysql
1
3.安装初始化数据库

在MySQL上安装Zabbix数据库和用户:
MariaDB [(none)]> create database zabbix character set utf8 collate utf8_bin;
MariaDB [(none)]> grant all privileges on zabbix.* to zabbix@localhost identified by 'zabbix';
初始架构(Schema)和数据
[root@localhost ~]# cd /usr/share/doc/zabbix-server-mysql-3.4.14/
[root@localhost zabbix-server-mysql-3.4.14]# zcat create.sql.gz | mysql -uroot -predhat zabbix
1
2
3
4
5
6
4.启动Zabbix Server进程
zabbix-server默认开启端口为10051

在zabbix_server.conf中编辑数据库配置
[root@localhost ~]# vim /etc/zabbix/zabbix_server.conf
91 DBHost=localhost
101 DBName=zabbix
117 DBUser=zabbix
127 DBPassword=zabbix
[root@localhost ~]# systemctl start zabbix-server
[root@localhost ~]# systemctl enable zabbix-server
[root@localhost ~]# ps -aux | grep zabbix-server
root       1879  0.0  0.0 112704   976 pts/2    R+   20:57   0:00 grep --color=auto zabbix-server
1
2
3
4
5
6
7
8
9
10
5.编辑Zabbix前端的PHP配置

[root@localhost ~]# vim /etc/httpd/conf.d/zabbix.conf 
<IfModule mod_php5.c>
        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 always_populate_raw_post_data -1
        php_value date.timezone Asia/Shanghai
    </IfModule>
   配置修改完成重新启动httpd服务:
   [root@localhost ~]# systemctl restart httpd
1
2
3
4
5
6
7
8
9
10
11
12
13
6.进入浏览器访问:http://主机ip/zabbix
默认的用户名/密码为Admin/zabbix;
点击进入下一步检查是否有报错;有报错进行解决
输入数据库的用户名和密码,使用的数据库以及添加使用的端口号,这里默认
请输入Zabbix服务器的主机名或主机IP地址和端口号,以及安装的名称(可选)。
输入用户名和密码进入页面


zabbix使用
1 . 将zabbix设置为中文
点击右上角的小人
将语言设置为中文

2 . 新建监控主机
zabbix-agent默认开启端口10050

[root@www ~]# rpm -ivh zabbix-release-3.4-1.el7.centos.noarch.rpm
[root@www ~]# yum install -y zabbix-agent
[root@server176 ~]# vim /etc/zabbix/zabbix_agentd.conf
 97 Server=192.168.88.177   #添加zabbix-server的主机ip
138 ServerActive=192.168.88.177   #添加zabbix-server的主机ip
149 Hostname=server176  #添加zabbix-agent的主机名·
[root@www ~]# systemctl start zabbix-agent
[root@www ~]# systemctl enable zabbix-agent
1
2
3
4
5
6
7
8
配置(Configuration)—主机(Hosts)菜单,点击创建主机(Create host)以添加新的主机
填写主机名,可见主机名,添加群组,设置agent代理,添加完成。在主机可以看到新建的监控主机;

zabbix_agent.conf文件配置详解

# PidFile=/var/run/zabbix/zabbix_agentd.pid
PID文件名

# LogType=file 
日志文件路径;如果未配置,日志会记录到syslog中;默认配置路径:LogFile=/var/log/zabbix/zabbix_agentd.log

# LogFileSize=0
0 - 关闭自动轮滚.日志文件大小,单位为MB

# DebugLevel=3
指定日志级别
0 - Zabbix进程启动和停止的基本信息
1 - critical级别
2 - error级别
3 - warnings级别
4 - debug级别
5 - extended debugging (与级别4一样. 只能使用runtime control 来设置.)

# SourceIP=
输出连接的源IP地址

# EnableRemoteCommands=0
是否运行zabbix server在此服务器上执行远程命令;0为禁止;1为允许

# LogRemoteCommands=0
记录原型执行的shell命令日志,级别为warrning;0为禁止;1为允许

# Server=192.168.88.177
zabbix server的ip地址,多个ip使用逗号分隔

# ListenPort=10050
监听端口,默认为10050

# ListenIP=0.0.0.0
监听IP地址,默认为所有接口,多个ip之间使用逗号分隔

# StartAgents=3
用于处理被动检查的zabbix_agentd的预设监听数量。如果设置为0,将禁用被动检查,代理将不会侦听任何TCP端口。

# ServerActive=192.168.88.177
zabbix 主动监控server的ip地址,使用逗号分隔多IP,如果注释这个选项,那么当前服务器的主动监控就被禁用了

# Hostname=server176
主机名,必须唯一,区分大小写。Hostname必须和zabbix web上配置的一直,否则zabbix主动监控无法正常工作。

# HostnameItem=system.hostname
设置主机名,只有当HostMetadata没设置才生效。

# HostMetadata=
仅用于主机自动注册功能,如果当前值为定义,那么它的值默认为HostMetadataItem的值

# HostMetadataItem=
功能同上,如果HostMetadata值未设置,这个配置才有效。

# RefreshActiveChecks=120
多久时间(秒)刷新一次主动监控配置信息,如果刷新失败,那么60秒之后会重试一次;

# BufferSend=5
取值范围:1-3600;数据存储在buffer中最长多少秒

# BufferSize=100
取值范围:2-65535;buffer最大值,如果buffer满了,zabbix将会将检索到的数据发送给zabbix server或者proxy

# MaxLinesPerSecond=20
Alias:key的别名

# Timeout=3
超时时间

# AllowRoot=0
是否允许使用root身份运行zabbix,如果值为0,并且是在root环境下,zabbix会尝试使用zabbix用户运行,如果不存在会告知zabbix用户不存在。
0 - 不允许
1 - 允许

# User=zabbix
运行zabbix程序的用户,如果AllowRoot被禁用,才有效果

# Include=/etc/zabbix/zabbix_agentd.d/*.conf
包含自配置文件,不同的配置写到不同的文件中,然后include,配置文件会显得规范。

# UnsafeUserParameters=0
允许所有字符的参数传递给用户定义的参数。

# UserParameter=
用户自定义key,

# LoadModule=
加载模块文件,可以写多个;必须配置LoadModulePath,指定模块目录;

# LoadModulePath=${libdir}/modules
模块路径,绝对路径,

# TLSConnect=unencrypted
代理应该如何连接到服务器或代理。用于主动检查。只能指定一个值:
未加密-没有加密的连接(unencrypted)
使用TLS和预共享密钥连接(psk)
使用TLS和证书连接(cert)

# TLSAccept=unencrypted
# TLSCAFile=
# TLSCRLFile=
# TLSServerCertIssuer=
# TLSServerCertSubject=
# TLSCertFile=
# TLSKeyFile=
# TLSPSKIdentity=
# TLSPSKFile=

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
94
95
96
97
98
99
100
101
102
103
104
105
106
107
3 . 为监控主机添加监控项

配置—主机----新建主机----监控项----创建新的监控项

监控项key值
监控项key的格式,包括关键参数,必须遵循语法规则。要构建一个有效的监控项的Key,首先指定Key的名称,然后选择是否具有参数,如果都两个都满足则被执行。

key参数
key参数可以使用,号分隔多个参数;可以是带引号、无引号的字符串或数组;如果key参数带引号,则允许任何Unicode字符,如果包含双引号则需要被反斜杠转义;如果key参数是一个不带引号的字符串,除逗号和右方括号(])之外,允许任何Unicode字符;如果key参数是一个数组,它需要包含在方括号中,其中各个参数需要符合多个参数的规则和语法。

自定义间隔

可以创建关于选中监控项的自定义时间规则。允许重新定义默认的更新间隔和调度,从而可以在特定时间或次序执行监控项的检查。
一种为灵活间隔和期间:
间隔 – 指定时间段的更新间隔;周期,期间 – 灵活间隔有效的时间段;
如果灵活间隔设置为“0”,则在灵活间隔期间不轮询监控项,也就是在定义时间段内不进行检查
一种为调度间隔
调度间隔用于在特定时间检查监控项。虽然灵活间隔被设计为重新定义默认监控项的更新间隔,但是调度间隔用于指定独立执行的检查计划。

灵活间隔和期间:
调度间隔:格式和示例


zabbix用户忘记密码
进入数据库查看zabbix数据库的user表修改用户密码

[root@server2 zabbix]# mysql -uroot -p
MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
| zabbix             |
+--------------------+
5 rows in set (0.01 sec)

MariaDB [(none)]> use zabbix;

MariaDB [zabbix]> select * from users;
+--------+-------+--------+---------------+----------------------------------+-----+-----------+------------+-------+---------+------+---------+----------------+------------+---------------+---------------+
| userid | alias | name   | surname       | passwd                           | url | autologin | autologout | lang  | refresh | type | theme   | attempt_failed | attempt_ip | attempt_clock | rows_per_page |
+--------+-------+--------+---------------+----------------------------------+-----+-----------+------------+-------+---------+------+---------+----------------+------------+---------------+---------------+
|      1 | Admin | Zabbix | Administrator | 5fce1b3e34b520afeffb37ce08c7cd66 |     |         1 | 0          | zh_CN | 30s     |    3 | default |              0 |            |             0 |            50 |
|      2 | guest |        |               | d41d8cd98f00b204e9800998ecf8427e |     |         0 | 15m        | en_GB | 30s     |    1 | default |              0 |            |             0 |            50 |
+--------+-------+--------+---------------+----------------------------------+-----+-----------+------------+-------+---------+------+---------+----------------+------------+---------------+---------------+
2 rows in set (0.00 sec)
##密码使用md5进行加密,所以修改密码时需要将自己的密码进行加密:
[root@server2 ~]# echo -n redhat | openssl md5
(stdin)= e2798af12a7a0f4f70b4d69efbc25f4d
MariaDB [zabbix]> update users set passwd="e2798af12a7a0f4f70b4d69efbc25f4d" where userid="1";
MariaDB [zabbix]> select * from users;
+--------+-------+--------+---------------+----------------------------------+-----+-----------+------------+-------+---------+------+---------+----------------+------------+---------------+---------------+
| userid | alias | name   | surname       | passwd                           | url | autologin | autologout | lang  | refresh | type | theme   | attempt_failed | attempt_ip | attempt_clock | rows_per_page |
+--------+-------+--------+---------------+----------------------------------+-----+-----------+------------+-------+---------+------+---------+----------------+------------+---------------+---------------+
|      1 | Admin | Zabbix | Administrator | e2798af12a7a0f4f70b4d69efbc25f4d |     |         1 | 0          | zh_CN | 30s     |    3 | default |              0 |            |             0 |            50 |
|      2 | guest |        |               | d41d8cd98f00b204e9800998ecf8427e |     |         0 | 15m        | en_GB | 30s     |    1 | default |              0 |            |             0 |            50 |
+--------+-------+--------+---------------+----------------------------------+-----+-----------+------------+-------+---------+------+---------+----------------+------------+---------------+---------------+
2 rows in set (0.00 sec)

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
Zabbix discoverer processes more than 75% busy
zabbix在使用时出现如下报警:

发生原因
配置的每个discovery任务在一定时间内占用1个discovery进程,而zabbix_server.conf中默认配置只有1个discovery(被注释,默认生效);
同时为了快速验证自动发现效果,将discovery任务的"Delay"时间由默认的3600s设置成60s。
总结:两个原因导致平均时间内discovery processes过高而报警。

处理解决办法如下:将配置文件的发现进程改为多个,一般为0-250个;

[root@server2 ~]# vim /etc/zabbix/zabbix_server.conf 
StartDiscoverers=3
[root@server2 ~]# systemctl restart zabbix-server
1
2
3

————————————————
版权声明:本文为CSDN博主「给自己一个愿望」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_39249306/article/details/82966325

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐