跳转至

Zabbix监控1

一. 配置zabbix监控Nginx服务

1. 监控nginx

Zabbix默认自带了很多有用的监控模板,通常对主机运行状态使用默认的模块就可以了。有时候我们也需要根据实际情况自定义一些监控信息。下面就介绍一下zabbix监控nginx服务的配置过程。整个配置过程大致如下

  1. 确定监控内容
  2. 编写agent端的监控脚本
  3. 配置zabbix_agentd.conf文件,定义监控脚本key
  4. zabbix服务端使用zabbix_get测试获取数据
  5. 登录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

dnf -y install nginx

4 修改nginx配置文件

cp /etc/nginx/nginx.conf{,.bak}
vi /etc/nginx/nginx.conf

在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

访问测试

alt text

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

zabbix网站 192.168.100.103

1. 创建模板

alt text

2. 配置模板

alt text

3. 创建监控项

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

alt text

此时我们就可以看到了

alt text

创建监控下要注意命名方式,能够见名知义.最关键的是键值,这里的键值一定要和agent端配置文件中定义的键值一致。

在监控脚本中,一个定义了8个监控项,所以这里的监控项页面要创建8个,重复上面步骤,创建脚本中相应的监控项

使用上面的方法创建8个监控项,制定不同名称和键值

alt text

4. 创建图形

监控项创建好后就可以创建图像了

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

alt textalt textalt textalt text

5. 关联模板

alt textalt textalt textalt text

6. 查看效果

alt text

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

alt text