Zabbix监控1¶
一. 配置zabbix监控Nginx服务¶
1. 监控nginx¶
Zabbix默认自带了很多有用的监控模板,通常对主机运行状态使用默认的模块就可以了。有时候我们也需要根据实际情况自定义一些监控信息。下面就介绍一下zabbix监控nginx服务的配置过程。整个配置过程大致如下
- 确定监控内容
- 编写agent端的监控脚本
- 配置zabbix_agentd.conf文件,定义监控脚本key
- zabbix服务端使用zabbix_get测试获取数据
- 登录zabbix web配置台
2. 确定监控内容¶
nginx内置了一个status状态的功能,通过配置可以看到nginx的运行状况,status现实的内容包括当前连接数,处于活动状态的连接数,已经处理的请求数等。
在nginx配置文件中,添加status配置
location /nginx_status {
stud_status on;
access_log off;
allow 127.0.0.1;
allow 192.168.100.103;
# zabbix服务器的地址,一般是内网地址
deny all;
}
# 把这块加入虚拟主机的server{}中,也可以单独定义一个专门用于监控的虚拟主机。
# deny all,拒绝除了allow中的主机之外所有主机访问此URL,实验过程中如果遇到403则说明有可能时自己把测试机拒绝了
3. 在zabbix_agent安装nginx¶
4 修改nginx配置文件¶
在server模块中添加
location /nginx_status {
stub_status on;
access_log off;
allow 127.0.0.1;
allow 192.168.100.103;
deny all;
}
或者直接粘贴结果
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
include /usr/share/nginx/modules/*.conf;
events {
worker_connections 1024;
}
http {
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 4096;
include /etc/nginx/mime.types;
default_type application/octet-stream;
include /etc/nginx/conf.d/*.conf;
server {
listen 80;
listen [::]:80;
server_name _;
root /usr/share/nginx/html;
include /etc/nginx/default.d/*.conf;
error_page 404 /404.html;
location = /404.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
location /nginx_status {
stub_status on;
access_log off;
allow 127.0.0.1;
allow 192.168.100.103;
deny all;
}
}
}
5 语法检查,无误后启动nginx,并访问测试¶
# 1. 语法检测
[root@7 ~]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
# 2. 启动nginx
[root@7 ~]# systemctl enable --now nginx
Created symlink /etc/systemd/system/multi-user.target.wants/nginx.service → /usr/lib/systemd/system/nginx.service.
# 3. 查看端口占用
[root@7 ~]# ss -tuanp|grep nginx
tcp LISTEN 0 511 0.0.0.0:80 0.0.0.0:* users:(("nginx",pid=4165,fd=6),("nginx",pid=4164,fd=6),("nginx",pid=4163,fd=6))
tcp LISTEN 0 511 [::]:80 [::]:* users:(("nginx",pid=4165,fd=7),("nginx",pid=4164,fd=7),("nginx",pid=4163,fd=7))
# 4. 查看进程
[root@7 ~]# ps -elf|grep nginx
1 S root 4163 1 0 80 0 - 3022 sigsus 09:24 ? 00:00:00 nginx: master process /usr/sbin/nginx
5 S nginx 4164 4163 0 80 0 - 4105 ep_pol 09:24 ? 00:00:00 nginx: worker process
5 S nginx 4165 4163 0 80 0 - 4105 ep_pol 09:24 ? 00:00:00 nginx: worker process
0 S root 4187 1440 0 80 0 - 1663 pipe_r 09:28 pts/0 00:00:00 grep --color=auto nginx
访问测试

Nginx status详细说明
| 字段 | 含义 |
|---|---|
| Active connections | 当前的活动连接数,包含处于等待状态的连接 |
| accepts | 接收到的客户端发来的连接数 |
| handled | 已经处理完成的连接数,一般情况下它和accepts的值相同,如果不说明nginx性能会出现瓶颈 |
| requests | 客户端请求总数 |
| reading | 正在读取请求头信息的连接数 |
| writing | 正在发送响应报文的连接数 |
| waiting | 处于闲置状态正等待客户端发送请求的连接数 |
在访问效率很高,请求很快被处理完毕的情况下,waiting数比较多时正常的。
如果reading+writing数较多,则说明并发访问量很大,正在处理过程中。
6. 编写监控脚本¶
编写监控脚本,放在/usr/local/zabbix/scripts目录下
通过脚本获取status页面信息的关键值,zabbix server通过这些关键之才能生成数据图像,获取status的关键值脚本如下
# 创建存放脚本的目录
mkdir /usr/local/zabbix/scripts
# 写入脚本内容
cat << 'EOF'|tee /usr/local/zabbix/scripts/ngx_status.sh
#! /bin/bash
# Description: zabbix监控nginx状态
# Note: 此脚本需要配置在被监控端
NGINX_HOST="127.0.0.1"
PORT="80"
# 检测nginx进程是否存在
function ping {
/sbin/pidof nginx|wc -l
}
# 检测nginx性能
function active {
/usr/bin/curl "http://$NGINX_HOST:$PORT/nginx_status" 2>/dev/null|grep 'Active'|awk '{print $NF}'
}
function reading {
/usr/bin/curl "http://$NGINX_HOST:$PORT/nginx_status" 2>/dev/null|grep 'Reading'|awk '{print $2}'
}
function writing {
/usr/bin/curl "http://$NGINX_HOST:$PORT/nginx_status" 2>/dev/null|grep 'Writing'|awk '{print $4}'
}
function waiting {
/usr/bin/curl "http://$NGINX_HOST:$PORT/nginx_status" 2>/dev/null|grep 'Waiting'|awk '{print $6}'
}
function accepts {
/usr/bin/curl "http://$NGINX_HOST:$PORT/nginx_status" 2>/dev/null|awk NR==3|awk '{print $1}'
}
function handled {
/usr/bin/curl "http://$NGINX_HOST:$PORT/nginx_status" 2>/dev/null|awk NR==3|awk '{print $2}'
}
function requests {
/usr/bin/curl "http://$NGINX_HOST:$PORT/nginx_status" 2>/dev/null|awk NR==3|awk '{print $3}'
}
# 执行function
$1
EOF
# 给脚本添加执行权限
chmod +x /usr/local/zabbix/scripts/ngx_status.sh
本地测试脚本
[root@7 ~]# sh /usr/local/zabbix/scripts/ngx_status.sh active
1
[root@7 ~]# sh /usr/local/zabbix/scripts/ngx_status.sh accepts
7
7. 修改zabbix_agent.conf¶
使用脚本监控需要时zabbix-agentd.conf文件中的UnsafeUserParemeters=1开启
sed -i 's@# UnsafeUserParameters=0@UnsafeUserParameters=1@' /usr/local/zabbix/etc/zabbix_agentd.conf
8. 定义监控脚本key¶
添加zabbix配置文件,放于/usr/local/zabbix/etc/zabbix_agentd.conf.d目录下(agent的配置文件/usr/local/zabbix/etc/zabbix_agentd.conf中定义了其他key的包含目录)创建配置文件nginx_status.conf
# 写入监控脚本key
cat << 'EOF'| tee /usr/local/zabbix/etc/zabbix_agentd.conf.d/nginx_status.conf
UserParameter=nginx.status[*],/usr/local/zabbix/scripts/ngx_status.sh $1
EOF
# 配置完成后重启zabbix_agent
systemctl restart zabbix-agent
9. zabbix服务端使用zabbix_get获取测试数据¶
切换到5上
[root@5 ~]# /usr/local/zabbix/bin/zabbix_get -s 192.168.100.106 -p 10050 -k nginx.status[ping]
1
[root@5 ~]# /usr/local/zabbix/bin/zabbix_get -s 192.168.100.106 -p 10050 -k nginx.status[accepts]
8
[root@5 ~]# /usr/local/zabbix/bin/zabbix_get -s 192.168.100.106 -p 10050 -k nginx.status[active]
1
二. 登录zabbix_server的Web界面创建模板¶
服务端测试正常后就可以在web界面配置监控了,zabbix配置都是通过界面配置,要熟练配置监控,要了解zabbix的每个组件的功能以及各个组件之间的关系,否则看着一堆菜单就会无从下手
zabbix的配置流程大致如下
创建主机组 => 添加主机 => 创建监控模板 => 创建应用集 => 创建监控项 => 创建图像 => 创建触发器 => 创建事件 => 创建处理动作 => 创建用户组与用户 => 创建警告方式
由于前面已经创建了主机群组和主机,这里从配置模板开始。我们可以通过配置监控模板的方式,让所有相同的监控需求主机都同意调用这个监控模板,这样就不用一个一个的添加监控了
本章节只做 创建监控模板 => 创建应用集 => 创建监控项 => 创建图像 这几项的步骤,监控告警下次再说
0. 访问zabbix_server¶
1. 创建模板¶

2. 配置模板¶

3. 创建监控项¶
先在刚创建的模板上点击'监控项'进入监控项

此时我们就可以看到了

创建监控下要注意命名方式,能够见名知义.最关键的是键值,这里的键值一定要和agent端配置文件中定义的键值一致。
在监控脚本中,一个定义了8个监控项,所以这里的监控项页面要创建8个,重复上面步骤,创建脚本中相应的监控项
使用上面的方法创建8个监控项,制定不同名称和键值

4. 创建图形¶
监控项创建好后就可以创建图像了
创建图形在选择要显示图像的监控项时,可以选择多个监控项。这样就可以在一个图形中显示多个数据的线图




5. 关联模板¶




6. 查看效果¶

此时,我就就能看到这些图形了
