使用的最多
实验环境
zabbix 是一个基于 WEB 界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案 ( 基于 GPL V2 ) zabbix 由 2 部分构成,zabbix server 与可选组件 zabbix agent
常用组件
zabbix agent:部署在被监控主机上,负责收集被监控主机的数据,并将数据发送给zabbix server。
zabbix server:负责接收agent发送的报告信息,并且负责组织配置信息、统计信息、操作数据等。
zabbix database:用于存储所有zabbix的配置信息、监控数据的数据库。
zabbix web:zabbix的web界面,管理员通过web界面管理zabbix配置以及查看zabbix相关监控信息,可以单独部署在独立的服务器上。
zabbix proxy:可选组件,用于分布式监控环境中,zabbix proxy代表server端,完成局部区域内的信息收集,最终统一发往server端。
Zabbix监控原理:
Agentd安装在被监控的主机上,Agent负责定期收集客户端本地各项数据,并发送至Zabbix Server端,Zabbix Server收到数据,将数据存储到数据库中,用户基于Zabbix WEB可以看到数据在前端展现图像。当Zabbix监控某个具体的项目,改项目会设置一个触发器阈值,当被监控的指标超过该触发器设定的阈值,会进行一些必要的动作,动作包括:发送信息(邮件、微信、短信)、发送命令(SHELL 命令、Reboot、Restart、Install等)
zabbix 安装完成后会产生 5 个程序:zabbix_agentd、zabbix_get、zabbix_proxy、zabbix_sender、 zabbix_server,zabbix_java_gateway
是可选,这个需要另外安装
zabbix_agentd: 部署在被监控主机上,客户端守护进程,此进程收集客户端数据,例如 cpu 负载、内存、硬盘使用情况 等
zabbix_get: zabbix 工具,单独使用的命令,通常用于排错
zabbix_sender: zabbix 工具,用于发送数据给 server 或者 proxy ,在脚本完成之后使用 sender 主 动将数据提交
zabbix_server: zabbix 服务端守护进程,所有的数据都是被提交或主动提交到 zabbix_server 端
zabbix_proxy: zabbix 代理守护进程。功能类似 server,唯一不同的是它只是一个中转站,它需要 把收集到的数据提交/被提交到 server 里
zabbix_java_gateway: zabbix2.0 之后引入的一个功能。顾名思义:Java 网关,类似 agentd,但是 只用于 Java 方面。需要特别注意的是,它只能主动去获取数据,而不能被动获取数据。它的数据最终 会给到 server 或者 proxy
Zabbix监控概念
主机(host): 被监控的网络设备,可以写IP或者DNS;
主机组(host group): 主机组用于管理主机,可以批量设置权限;
监控项(item): 具体监控项,items值由独立的keys进行识别;
触发器(trigger): 为某个items设置触发器,达到触发器会执行action动作;
事件(event): 例如达到某个触发器,称之为一个事件;
动作(action): 对于特定事件事先定义的处理方法,默认可以发送信息及发送命令;
报警升级(escalation): 发送警报或执行远程命令的自定义方案,如隔5分钟发送一次警报,共发送5次等。
媒介(media): 发送通知的方式,可以支持Mail、SMS、Scripts等;
通知(notification): 通过设置的媒介向用户发送的有关某事件的信息;
远程命令 达到触发器,可以在被监控端执行命令;
模板(template): 可以快速监控被监控端,模块包含:item、trigger、graph、screen、application;
web场景(web scennario) 用于检测web站点可用性,监控HTTP关键词;
web前端(frontend): Zabbix的web接口;
图形(graph) 监控图像;
屏幕(screens) 屏幕显示;
幻灯(slide show) 幻灯显示;
centos 7
yum 可用
最小化安装
关闭防火墙与 selinux
两个网卡,一个仅主机模式,一个 nat 模式
[root@localhost ~]$ yum -y install lrzsz vim gcc gcc-c++
zabbix需要有 lamp 环境
[root@zabbix ~]$ yum -y install mariadb mariadb-server httpd php php-mysql gcc gcc-c++
#安装 mariadb http php , 数据库 centos7 是 mariadb 与 MySQL 一样
[root@zabbix ~]$ systemctl start httpd && systemctl enable httpd
[root@zabbix ~]$ systemctl start mariadb && systemctl enable mariadb
[root@zabbix ~]$ mysql_secure_installation # mariadb不会自动初始化,手动 mariadb 初始化
……………
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
you haven't set the root password yet, the password will be blank,
so you should just press enter here.
Enter current password for root (enter for none): #mysql的root密码,还没设置,直接回车即可
OK, successfully used password, moving on...
Setting the root password ensures that nobody can log into the MariaDB
root user without the proper authorisation.
Set root password? [Y/n] y #是否设置root密码,输入y是
New password: root #输入密码123
Re-enter new password: root #再次数据密码,两次需要一致
Password updated successfully!
Reloading privilege tables..
... Success!
....
Remove anonymous users? [Y/n] y #移除匿名用户,输入y是
....
Disallow root login remotely? [Y/n] y #拒绝远程登陆,输入y是
....
Remove test database and access to it? [Y/n] y #移除测试数据库,输入y是
....
Reload privilege tables now? [Y/n] y #刷新权限表,输入y是
....
All done! If you've completed all of the above steps, your MariaDB
installation should now be secure.
Thanks for using MariaDB!
————————————————
[root@zabbix ~]$ mysql -uroot -p #登录数据库
Enter password: #密码
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 10
Server version: 5.5.60-MariaDB MariaDB Server
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]> quit;
[root@zabbix ~]$ rpm -ivh http://repo.zabbix.com/zabbix/3.2/rhel/7/x86_64/zabbix-release-3.2-1.el7.noarch.rpm
#显示安装进度,从官方yum源安装
[root@zabbix ~]$ rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-ZABBIX #导入密钥
[root@zabbix yum.repos.d]$ yum -y install zabbix-server-mysql zabbix-web-mysql zabbix-agent
#安装zabbix连接数据库,web页面,agent部署在被监控的主机上
#被监控端只需要部署agent即可
初始化数据库(zabbix-server端操作)
[root@zabbix ~]$ mysql -uroot -p123
………………
MariaDB [(none)]> CREATE DATABASE zabbix DEFAULT CHARACTER SET utf8 COLLATE utf8_bin;
#debian 这样做导入会报错,(解决:create database zabbix)
Query OK, 1 row affected (0.01 sec)
MariaDB [(none)]> grant all privileges on zabbix.* to zabbix@localhost identified by 'zabbix';
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> quit;
#导入zabbix初始化数据
[root@zabbix ~]$ cd /usr/share/doc/zabbix-server-mysql-3.2.11/
[root@zabbix zabbix-server-mysql-3.2.11]$ zcat create.sql.gz | mysql -uroot -p zabbix
Enter password: 123
#zcat /usr/share/doc/zabbix-server-mysql*/create.sql.gz | mysql -uzabbix -pzabbix zabbix -e "use zabbix;"
#zcat,先解压,在通过cat打开
[root@zabbix zabbix-server-mysql-3.2.11]$ mysql -uroot -p123 << EOF #查看表
> use zabbix;
> show tables;
> EOF
………………
配置zabbix_server的配置文件
[root@zabbix ~]$ cd
[root@zabbix ~]$ vim /etc/zabbix/zabbix_server.conf
DBHost=localhost #连接数据库地址 81行
DBName=zabbix #连接数据库名 91行
DBUser=zabbix #连接数据库用户名 107行
DBPassword=zabbix #连接数据库用户密码 115行
[root@zabbix ~]$ systemctl start zabbix-server && systemctl enable zabbix-server
编辑Zabbix前端的PHP配置,zabbix_web
[root@zabbix ~]$ vim /etc/httpd/conf.d/zabbix.conf
php_value date.timezone Asia/Shanghai #取消注释,修改时区为上海 19行
[root@zabbix ~]$ systemctl restart httpd
调整同步时间
[root@zabbix ~]$ yum -y install ntpdate
[root@zabbix ~]$ ntpdate cn.pool.ntp.org
修改apached的配置文件设置访问路径
[root@zabbix ~]$ vim /etc/httpd/conf/httpd.conf
DocumentRoot "/var/www/html" #修改为/usr/share/zabbix/ 119行
[root@zabbix ~]$ systemctl restart httpd
浏览器输入10.1.1.11
(zabbix服务端的IP)或者10.1.1.11/zabbix
访问
2. 检测的php的相关依赖,点击下一步
3. 配置数据库相关信息
5. 输出了刚才设置的信息,直接点下一步
6. 安装成功
7. 然后就跳到登录界面了,用户名是Admin,密码是zabbix
8. 配置server web展示显示中文
#修改被监控端的配置文件,agent前面已经安装
[root@centos1 ~]$ vim /etc/zabbix/zabbix_agentd.conf
Server=10.10.10.11 #zabbix-server的IP
# ListenPort=10050 默认监听段口是tcp10050
ServerActive=10.10.10.11 #zabbix-server的IP
Hostname=10.10.10.11 #本机的ip地址,或者可解析的主机名,但要与web界面一致
[root@centos1 ~]$ systemctl restart zabbix-agent && systemctl enable zabbix-agent
[root@centos1 ~]$ netstat -natp |grep 10050
tcp 0 0 0.0.0.0:10050 0.0.0.0:* LISTEN 11107/zabbix_agentd
tcp6 0 0 :::10050 :::* LISTEN 11107/zabbix_agentd
点击配置—主机,删除这个停用的监控,自己进行配置
下面是主机的添加过程
首先创建一个主机组
配置-----> 主机群组-----> 创建主机群组(web页面右上角)-----> 添加组名,如:Zabbix agents(在弹出框中输入组名)----->添加
添加一个主机
配置 ----->主机 -----> 右上角在群组那里选择Zabbix agents-----> 点击创建主机
给此主机引用一条模板,模板定义了监控那些选项数据
添加打勾后划到最下面选择
然后点击模板弹框下面的选择,这里就会添加上刚才勾选的,然后点击添加才能添加上
下面是添加完后的效果图
最后看下图形效果
检测中-----> 图形----->然后就是选择要看什么了,如下图:
在 win10 中 win+R 键输入 fonts 选择一种字体文件复制到 zabbix 主机
然后字体上传到zabbix-server服务器
[root@zabbix ~]$ mv msyh.ttc /usr/share/zabbix/fonts/
[root@zabbix ~]$ cd /usr/share/zabbix/fonts/
[root@zabbix fonts]$ mv msyh.ttc msyh.ttf && chmod a+x msyh.ttf
[root@zabbix fonts]$ vim /usr/share/zabbix/include/defines.inc.php
define('ZBX_GRAPH_FONT_NAME', 'graphfont'); // font file name
改为
define('ZBX_GRAPH_FONT_NAME', 'msyh'); // font file name
刷新页面 替换字体完成
监控另外一台linux服务器(10.1.1.12) 本次使用的是centos7系统,选择对应的版本,centos6源码包也提供了
[root@web-1 ~]$ yum -y install httpd zabbix-agent-3.2.1-1.el7.x86_64.rpm
#上传安装包进行安装
[root@web-1 ~]$ systemctl start httpd && systemctl enable httpd
[root@web-1 ~]$ echo "hello" > /var/www/html/index.html #修改默认网页
[root@web-1 ~]$ curl localhost #查看默认网页
hello
[root@web-1 ~]$ vim /etc/zabbix/zabbix_agentd.conf
Server=10.1.1.11 #zabbix-server的ip
# ListenPort=10050 默认监听段口是tcp10050
ServerActive=10.1.1.11 #zabbix-server的ip
Hostname=10.1.1.12 #本机的ip地址,或者可解析的主机名
[root@web-1 ~]$ systemctl start zabbix-agent && systemctl enable zabbix-agent
添加主机遇上面步骤一样
如果服务器比较多,一台一台在web页面配置比较麻烦,接下来配置自动发现规则,自动发现(LLD)提供了一种在计算机上为不同实体自动创建监控项,触发器和图形的方法
两台 centos7 服务器
10.1.1.13——agent(被监控端)
10.1.1.14——agent(被监控端)
[root@web-2 ~]$ scp [email protected]:/root/zabbix-agent-3.2.1-1.el7.x86_64.rpm
[root@web-2 ~]$ yum -y install httpd zabbix-agent-3.2.1-1.el7.x86_64.rpm
#拷贝被监控端 rpm 包并安装
[root@web-2 ~]$ systemctl start httpd && systemctl enable httpd
[root@web-2 ~]$ echo "hello" >> /var/www/html/index.html
[root@web-2 ~]$ curl localhost
hello
[root@web-2 ~]$ vim /etc/zabbix/zabbix_agentd.conf
Server=10.1.1.11 #zabbix-server的ip
# ListenPort=10050 默认监听段口是tcp10050
ServerActive=10.1.1.11 #zabbix-server的ip
Hostname=10.1.1.13 #本机的ip地址,或者可解析的主机名
#另一台 web-3 IP是 10.1.1.14 其余步骤一致
[root@web-2 ~]$ systemctl start zabbix-agent && systemctl enable zabbix-agent
配置自动发现步骤
在web页面点击**【配置】**------> 【自动发现】----->【**创建发现规则】添加一个自动发现规则,定时扫描一个网段的机器有没有在线,然后在 【配置】------> 【动作】----->【事件源】**选择自动发现的动作,告诉他,一旦自动发现 发现了一台机器后,就添加到主机监控里
【配置】------> 【动作】----->【事件源】选择自动发现的动作,然后点击【创建动作】
接下来就会跳转动作配置页面
**然后点击操作,添加操作细节,最后点击 【添加】 **
在web页面点击**【配置】------> 【自动发现】----->【创建发现规则】**添加一个自动发现规则
接下来就会跳转自动发现规则配置页面
然后点击【监测中】------> 【自动发现】会发现两台主机已经被自动发现
以后 10.1.1.13-100 范围的 IP 主机都会被自动发现并添加
把10.10.10.12服务从zabbix-web配置页面删掉,然后停了这台主机的httpd服务
使用之前10.10.10.12服务器操作
源码编译安装 Nginx 服务器
[root@web-1 ~]$ systemctl stop httpd && systemctl disable httpd #关闭 htpd 以防端口被占用
[root@web-1 ~]$ tar -xf nginx-1.2.6.tar.gz && cd nginx-1.2.6 #上传源码包并解压
[root@web-1 nginx-1.2.6]$ yum -y install pcre pcre-devel.x86_64 zlib zlib-devel gcc gcc-c++
#使用本地 yum 源安装依赖等
[root@web-1 nginx-1.2.6]$ ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module
[root@web-1 nginx-1.2.6]$ meke && meke install #编译安装
[root@web-1 nginx-1.2.6]$ echo $?
[root@web-1 nginx-1.2.6]$ echo "123123" > /usr/local/nginx/html/index.html
[root@web-1 nginx-1.2.6]$ /usr/local/nginx/sbin/nginx #启动
[root@web-1 nginx-1.2.6]$ curl localhost
123123
开启健康检测
[root@web-1 nginx-1.2.6]$ vim /usr/local/nginx/conf/nginx.conf
...
server {
location / {
root html;
index index.html index.htm;
}
#添加如下内容
location /nginx-status { #开启健康统计
stub_status on;
}
.......
}
.....
[root@web-1 nginx-1.2.6]$ /usr/local/nginx/sbin/nginx -t #检查配置问及爱你
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
[root@web-1 nginx-1.2.6]$ kill -HUP $( cat /usr/local/nginx/logs/nginx.pid ) #重载
[root@web-1 nginx-1.2.6]$ cd
[root@web-1 ~]$ vim nginx-status.sh
#!/bin/bash
HOST="127.0.0.1"
PORT="80"
# 检测 nginx 进程是否存在
function ping {
/sbin/pidof nginx | wc -l
}
# 检测 nginx 性能
function active {
/usr/bin/curl "http://$HOST:$PORT/nginx-status/" 2>/dev/null| grep 'Active' | awk '{print $NF}'
}
function reading {
/usr/bin/curl "http://$HOST:$PORT/nginx-status/" 2>/dev/null| grep 'Reading' | awk '{print $2}'
}
function writing {
/usr/bin/curl "http://$HOST:$PORT/nginx_status/" 2>/dev/null| grep 'Writing' | awk '{print $4}'
}
function waiting {
/usr/bin/curl "http://$HOST:$PORT/nginx-status/" 2>/dev/null| grep 'Waiting' | awk '{print $6}'
}
function accepts {
/usr/bin/curl "http://$HOST:$PORT/nginx-status/" 2>/dev/null| awk NR==3 | awk '{print $1}'
}
function handled {
/usr/bin/curl "http://$HOST:$PORT/nginx-status/" 2>/dev/null| awk NR==3 | awk '{print $2}'
}
function requests {
/usr/bin/curl "http://$HOST:$PORT/nginx-status/" 2>/dev/null| awk NR==3 | awk '{print $3}'
}
# 执行 function
$1
[root@web-1 ~]$ chmod a+x nginx-status.sh #赋予权限
[root@web-1 ~]$ bash nginx-status.sh active
1
[root@web-1 ~]$ mv nginx-status.sh /etc/zabbix/zabbix_agentd.d/
#10.1.1.13执行操作
[root@web-2 ~]$ while 2>1
do
curl 10.10.10.12
done
将自定义的 UserParameter 加入配置文件,然后重启 agentd
[root@web-1 ~]$ vim /etc/zabbix/zabbix_agentd.conf
UnsafeUserParameters=1 #是否开启自定义脚本,改为1
UserParameter=nginx.status[*],/etc/zabbix/zabbix_agentd.d/nginx-status.sh $1 #添加这一行
[root@web-1 ~]$ systemctl restart zabbix-agent.service
zabbix_get 获取数据 (10.1.1.11)
zabbix-server端操作
[root@zabbix ~]$ yum -y install zabbix-get-3.2.11-1.el7.x86_64.rpm
[root@zabbix ~]$ zabbix_get -s 10.1.1.12 -k 'nginx.status[requests]'
102402
[root@zabbix ~]$ zabbix_get -s 10.1.1.12 -k 'nginx.status[ping]'
1
然后在web配置页面,点击**【 配置 】-----> 【 模板 】------>【 导入 】**
【配置】-------->【主机】--------->【创建主机】
然后添加模板
刚刚添加的已经生效
web场景用于模拟客户端访问,检测服务器是否还正常
组合图把重要的参数放到一张图展示
创建web场景
【配置】------>【主机】------->【nginx服务器】------>【创建应用集】
创建 【应用集】
添加
htpd-code 有了后选择 【web场景】
创建 【web场景】
选择**【步骤】,点击【添加】**
会弹出web方案步骤页面
最后点击**【场景】,点击下面的【添加】**,场景构建完成
#nginx服务器添加一个测试页面10.10.10.12
[root@web-1 ~]$ echo “test” >> /usr/local/nginx/html/test.html
场景只会收集http-code,并不会报警,所以还要创建触发器
【配置】-------->【主机】--------->选择 nginx-服务器-1,然后点击**【触发器】**
点击 【创建触发器】
会跳转到触发器配置页面
已经创建完成并启用了
删除测试页面
[root@web-1 ~]$ rm -f /usr/local/nginx/html/test.html
稍等一会就可以看到页面报警了
添加上即可恢复
[root@web-1 ~]$ echo “test” > /usr/local/nginx/html/test.html
【监测中】------> 【聚合图形】------->【创建聚合图形】
跳转到聚合图形配置页面
选择刚刚创建的聚合图形
编辑聚合图形
更改
添加一个监控项的图形
点击+号,就会又多一列,然后点击 【更改】
添加时钟
以此类推添加
点击这个小人,正在发送的消息,设置报警信息
断开服务器测试,不同的警告就会对应不同的声音
会有一个webhook,复制下来。后面会有用
https://oapi.dingtalk.com/robot/send?access_token=xxxxxxxxxxxxx
[root@zabbix ~]$ vim tocken.sh
#!/bin/bash
to=$1 #给谁
subject=$2 #标题
text=$3 #内容
curl 'https://oapi.dingtalk.com/robot/send?access_token=xxxxxxxxxxxxxxxxxxx' \ #改成自己的
-H 'Content-Type: application/json' \
-d '
{"msgtype": "text",
"text": {
"content": "'"$text"'"
},
"at":{
"atMobiles": [ "'"$1"'" ],
"isAtAll": false
}
}'
[root@zabbix ~]$ chmod a+x token.sh
[root@zabbix ~]$ chown zabbix.zabbix token.sh
[root@zabbix ~]$ ./token.sh 1 2 告警 #机器人的设置关键字(告警),所以必须有关键字
把tocken脚本放到/usr/lib/zabbix/alertscripts/目录下
[root@zabbix ~]$ cp -a token.sh /usr/lib/zabbix/alertscripts/
遇到的报错1 {"errcode":43002,"errmsg":"需要POST请求"}curl: (6) Could not resolve host: ; 未知的错误 ./token.sh.bak:行6: -H: 未找到命令
原因 :windows 复制粘贴格式或字符出现了问题
解决 : 手动敲一遍,
遇到的报错2 [root@zabbix ~]$ ./token.sh 1 2 3 {"errcode":300001,"errmsg":"param error"}
原因 : 机器人没有 3 这个关键字
解决 : 3 换成机器人的关键字 或 添加关键字
1. 创建媒体类型
【配置】------> 【报警媒介类型】----->,然后点击【创建媒介类型】
监控方式添加参数
{ALERT.SENDTO}
{ALERT.SUBJECT}
{ALERT.MESSAGE}
3. 创建报警动作
【配置】------> 【动作】----->【触发器】,然后点击**【创建动作】**
接下来就会跳转动作配置页面
4.错误报警信息参数
点击操作 ,添加操作细节
标题(默认接收人)改为:
故障{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}
5. 错误恢复报警信息设置
点击恢复操作,添加操作细节
标题(默认接收人)改为:
恢复{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}
6. 给用户绑定媒体
**【管理】------>【用户】**选择Admin
断掉 nginx 服务器的网卡测试
稍等三分钟
恢复网卡后 (稍等两分钟)