02 zabbix 基础使用


安装 zabbix-agent

salt 状态管理

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
[root@linux-node1 init]# vim zabbix-yum-repo.sls 

zabbix-repo:
cmd.run:
- name: rpm -Uvh https://repo.zabbix.com/zabbix/3.0/rhel/7/x86_64/zabbix-release-3.0-1.el7.noarch.rpm


[root@linux-node1 zabbix]# vim zabbix-agent.sls

include:
- init.zabbix-yum-repo

zabbix-agent:
pkg.installed:
- name: zabbix-agent
- require:
- cmd: zabbix-repo

file.managed:
- name: /etc/zabbix/zabbix_agentd.conf
- source: salt://zabbix/files/zabbix_agentd.conf
- user: root
- group: root
- mode: 644
- template: jinja
- defaults:
SERVER_IP: 10.0.0.160
AGENT_HOSTNAME: {{ grains['fqdn'] }}
- require:
- pkg: zabbix-agent

service.running:
- name: zabbix-agent
- enable: True
- watch:
- pkg: zabbix-agent
- file: zabbix-agent

zabbix_agent.conf.d:
file.directory:
- name: /etc/zabbix_agent.conf.d
- wacth:
- service: zabbix-agent
- require:
- file: zabbix-agent
- pkg: zabbix-agent

yum 安装

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
rpm -Uvh https://repo.zabbix.com/zabbix/3.0/rhel/7/x86_64/zabbix-release-3.0-1.el7.noarch.rpm
[root@linux-node1 data]# yum install -y zabbix-agent

# 修改配置文件
[root@linux-node1 zabbix]# vim /etc/zabbix/zabbix_agentd.conf

# zabbix server
Server=10.0.0.160

# 主机名
Hostname=linux-node3.example.com

Include=/etc/zabbix/zabbix_agentd.d/

UnsafeUserParameters=0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 启动agent服务
[root@linux-node1 zabbix]# systemctl restart zabbix-agent
[root@linux-node1 zabbix]# systemctl status zabbix-agent
[root@linux-node1 zabbix]# netstat -tnlp|grep 10050

[root@linux-node1 zabbix]# grep '^[a-Z]' /etc/zabbix/zabbix_agentd.conf
PidFile=/var/run/zabbix/zabbix_agentd.pid
LogFile=/var/log/zabbix/zabbix_agentd.log
LogFileSize=0
Server=10.0.0.160
ServerActive=127.0.0.1
Hostname=linux-node3.example.com
Include=/etc/zabbix/zabbix_agentd.d/
UnsafeUserParameters=0

添加监控主机及设置

web添加主机

1
2
3
4
5
6
7
web-配置-主机-创建主机
1. 主机名
2. 显示的名称
3. 创建了新的群组
4. agent服务器IP
5. 描述
6. 勾选已启动

查看最新数据

1
可以过滤条件查看服务器监控数据

zabbix 更换字符集

1
2
3
4
5
6
7
8
9
10
新安装的zabbix-server会存在中文字符集显示问题,需要更换字符集

1. 开始 --> 控制面板 --> 字体 --> 微软雅黑 --> 复制到桌面会有两个文件:msyh msyhbd(粗体)

2. 更换字符集 先备份
cd /usr/share/fonts/dejavu
cp DejaVuSans.ttf DejaVuSans.ttf_bak

3. 上传 msyh.ttf 覆盖原字符集文件
mv msyh.ttf DejaVuSans.ttf

配置邮件告警

1
2
3
4
管理-报警媒介类型-Email
1. QQ邮箱开启SNMP和一个授权码,填写发件人密码时需要设置授权码为密码
2. 选择用户的报警媒介,添加Email报警并设置好邮箱地址
3. 开启邮件报警事件

自定义监控

监控nginx 80页面是否存活

1
2
3
4
5
6
7
8
# 在node3 安装个 nginx并启动
[root@linux-node1 zabbix]# yum install -y nginx
[root@linux-node1 zabbix]# systemctl start nginx

# 通过curl命令访问80查看是否返回200
# 能获取到 说明配置成功
[root@linux-node1 zabbix]# curl --head -s 10.0.0.162|grep '200 OK'|wc -l
1

检查agent配置文件

1
2
3
4
5
6
7
8
9
10
11
[root@linux-node1 zabbix]# vim /etc/zabbix/zabbix_agentd.conf 
# 建议server 和 agent都打开

1. 必须打开引入Include 自定义配置
Include=/etc/zabbix/zabbix_agentd.d/

2. 不允许特殊字符
UnsafeUserParameters=1
# Format: UserParameter=<key>,<shell command>

systemctl restart zabbix-agent

自定义一个 key 写到agent上

1
2
3
4
5
6
7
8
[root@linux-node1 zabbix_agentd.d]# vim zabbix-nginx.conf

# Format: UserParameter=<key>,<shell command>
# 执行的结果就是key值
UserParameter=nginx-alive,curl --head -s 10.0.0.162 |grep '200 OK'| wc -l

# 重启agent
systemctl restart zabbix-agent

zabbix-server get 测试

1
2
3
4
5
# 在server端 模拟发送数据 看有没有返回值
[root@linux-node1 zabbix]# yum install zabbix-get -y

[root@linux-node1 zabbix]# zabbix_get -s 10.0.0.162 -k nginx-alive
1

页面配置监控项

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
配置-主机-监控项-创建监控项
# 可启用的状态为正常

名称:建议和key一样
健值:一定要和key一样

Data type:数据类型,这里我们选择Decimal。其他的基本上用不上
Units:单位 超过1千就写成1k了。 可以在这里做一个单位的设置。默认就可以
Use custom multiplier:如果这里面设置了一个数,得出来的结果都需要乘以文本框设定的值

# 要看监控项是干嘛的 数据采集就不需要这么频繁 越频繁 压力越大
Update interval(in sec) 监控项刷新时间间隔(一般不要低于60秒) 通常时间60秒 机器多的话 1-5分钟
Custom intervals 创建时间间隔(例如:1点-7点每隔多少秒进行监控)格式大致为:周,时,分

History storage period 历史数据存储时间(根据业务来设置,默认就可以)
Trend storage period 趋势图要保存多久
New application 监控项的组
application 选择一个监控项组
Populates host inventory field 资产,可以设定一个监控项。把获取的值设置在资产上面

添加触发器

1
2
3
配置-主机-触发器-创建触发器
{linux-node2.example.com:nginx-alive.last(0)}=0
{主机名:健值.last(0)} =0 # (最后一次 = 0)

关闭nginx服务 查看邮件告警

1
[root@linux-node1 zabbix_agentd.d]# systemctl stop nginx

1
2
# 恢复服务
[root@linux-node1 zabbix_agentd.d]# systemctl start nginx

自定义监控项流程 小总结

1
2
3
4
5
6
7
8
9
1、添加用户自定义参数(在/etc/zabbix/zabbix.agent.d/定义了一个nginx.conf步骤如上) 

2、重启zabbix-agent

3、在Server端使用zabbix_get测试获取(命令如上)

4、在web界面创建item(监控项)

5、在web界面创建触发器

自定义模板

1
2
上一章节增加了一个自定义监控和触发器,那么要是监控nginx多项数据难道要一个一个添加么?
需要使用自定义模板

监控 nginx 状态

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 增加nginx_status server
[root@linux-node1 zabbix_agentd.d]# vim /etc/nginx/nginx.conf
server{
server_name 127.0.0.1;
location /nginx_status {
stub_status on;
access_log off;
allow 127.0.0.1;
deny all;
}
}

[root@linux-node3 zabbix_agentd.d]# systemctl reload nginx
[root@linux-node3 ~]# curl http://127.0.0.1/nginx_status
Active connections: 1
server accepts handled requests
10 10 10
Reading: 0 Writing: 1 Waiting: 0

Nginx状态解释

1
2
3
4
5
6
7
8
9
10
11
Active :               # Nginx 正处理的 活动链接数

accepts : # Nginx启动到现在共 处理了多少个连接。
handled : # Nginx启动到现在共 成功创建多少次握手。
requests : # Nginx总共 处理了多少次请求。

Reading : # 读取客户端的连接数
Writing : # 响应数据到客户端的数量
Waiting : # Nginx已经处理完正在等候下一次请求指令的驻留链接
Keep-alive的情况下,这个值等于active-(reading + writing)
请求丢失数=(握手数-连接数)可以看出,本次状态显示没有丢失请求。

编写nginx监控脚本

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
[root@linux-node3 zabbix]# vim nginx_status_plugin.sh 

#/bin/bash

NGINX_PORT=$1
NGINX_COMMAND=$2

nginx_active(){
# $NF 表示的最后一个Field(列),即输出最后一个字段的内容;
/usr/bin/curl "127.0.0.1:"$NGINX_PORT"/nginx_status/" 2>/dev/null | grep 'Active' | awk '{print $NF}'
}

nginx_reading(){
/usr/bin/curl "127.0.0.1:"$NGINX_PORT"/nginx_status/" 2>/dev/null | grep 'Reading' | awk '{print $2}'
}

nginx_writing(){
/usr/bin/curl "127.0.0.1:"$NGINX_PORT"/nginx_status/" 2>/dev/null | grep 'Reading' | awk '{print $4}'
}

nginx_waiting(){
/usr/bin/curl "127.0.0.1:"$NGINX_PORT"/nginx_status/" 2>/dev/null | grep 'Reading' | awk '{print $6}'
}

# accepts handled requests
nginx_accepts(){
/usr/bin/curl "127.0.0.1:"$NGINX_PORT"/nginx_status/" 2>/dev/null | awk 'NR==3 {print $1}'
}

nginx_handled(){
/usr/bin/curl "127.0.0.1:"$NGINX_PORT"/nginx_status/" 2>/dev/null | awk 'NR==3 {print $2}'
}

nginx_requests(){
/usr/bin/curl "127.0.0.1:"$NGINX_PORT"/nginx_status/" 2>/dev/null | awk 'NR==3 {print $3}'
}



main(){
case $2 in
active)
nginx_active;
;;
reading)
nginx_reading;
;;
writing)
nginx_writing;
;;
waiting)
nginx_waiting;
;;
accepts)
nginx_accepts;
;;
handled)
nginx_handled;
;;
requests)
nginx_requests;
;;
*)
echo $"USAGE:port {active|reading|writing|waiting|accepts|handled|requests}"
esac
}

main $1 $2
1
2
3
# 权限控制
chmod +x nginx_status_plugin.sh
chown -R zabbix:zabbix nginx_status_plugin.sh

添加到nginx监控文件中

1
2
3
4
5
6
7
8
[root@linux-node3 zabbix_agentd.d]# cd /etc/zabbix/zabbix_agentd.d
[root@linux-node3 zabbix_agentd.d]# vim zabbix-nginx.conf

# Format: UserParameter=<key>,<shell command>
UserParameter=nginx-alive,curl --head -s 10.0.0.162 |grep '200 OK'| wc -l
UserParameter=nginx-status[*],/etc/zabbix/nginx_status_plugin.sh "$1" "$2"

# 重启zabbix-agent

测试

1
2
3
4
5
6
7
8
9
# 测试 [参数1,参数2]
[root@linux-node1 dejavu]# zabbix_get -s 10.0.0.162 -k nginx-status[80,accepts]

[root@linux-node1 zabbix]# zabbix_get -s 10.0.0.162 -k nginx-status[80]
USAGE:port {active|reading|writing|waiting|accepts|handled|requests}
[root@linux-node1 zabbix]# zabbix_get -s 10.0.0.162 -k nginx-status[80,active]
1
[root@linux-node1 zabbix]# zabbix_get -s 10.0.0.162 -k nginx-status[80,handled]
27

创建 nginx 状态监控模板

1
2
3
1. 配置 模板 创建模板 Template Game-Nginx Status
2. 模板 创建应用集 Game Nginx Status
3. 监控项 创建监控项 复制多个

创建自定义图形

监控主机增加新模板

使用ab测试工具进行测试,设置10000并发进行访问

1
ab -c 100 -n 10000 http://10.0.0.162/nginx-status

自定义聚合图形

1
聚合图形-创建聚合图形

自定义幻灯片

1
聚合图形-创建幻灯片播放