zabbix笔记
一、Zabbix组件说明
1.1、为什么我们需要监控?
!!!无监控,不运维。
作为运维者,第一个接触的基本上是监控平台,各种各样的监控,看各种各样的指标,好像没有监控就觉得不正常,那么为什么需要监控呢?
监控:预防故障,例如当磁盘空间增长到一定的程度的时候,就会产生故障,这个时候监控系统的作用就是当达到一个阀值的时候,发出告警,然后进行处理。
监控:预测变化趋势,例如我的分布式文件系统,每天数据增长1T空间,那么我总共有多少空间,剩余空间大小,是否要进行扩容等操作。
监控:当故障发生的时候,能提供给我基本信息给与我排查的思路,例如redis不可读,是否能看到是哪个实例,能看到相关的日志信息,能测试是否刻读写,能查看哪个是master。
监控:监控系统关键指标,例如对于web服务器来说,响应速度,来判断是否中间件有问题,是否数据库有问题,还是网络有问题;活跃的用户数,每天我的网站有多少用户访问;有多少新注册的用户。
1.2、什么是Zabbix?
Zabbix 是由Alexei Vladishev创建,目前由Zabbix SIA在持续开发和支持。
Zabbix 是一个企业级的分布式开源监控方案。
Zabbix是一款能够监控各种网络参数以及服务器健康性和完整性的软件。Zabbix使用灵活的通知机制,允许用户为几乎任何事件配置基于邮件的告警。这样可以快速反馈服务器的问题。基于已存储的数据,Zabbix提供了出色的报告和数据可视化功能。这些功能使得Zabbix成为容量规划的理想方案。
Zabbix支持主动轮询和被动捕获。Zabbix所有的报告、统计信息和配置参数都可以通过基于Web的前端页面进行访问。基于Web的前端页面可以确保您从任何方面评估您的网络状态和服务器的健康性。适当的配置后,Zabbix可以在IT基础架构监控方面扮演重要的角色。对于只有少量服务器的小型组织和拥有大量服务器的大型公司也同样如此。
Zabbix是免费的。Zabbix是根据GPL通用公共许可证第2版编写和发行的。这意味着它的源代码都是免费发行的,可供公众任意使用。
1.3、Zabbix组件
Zabbix进程构成
1.zabbix-agents:
监控代理部署在监控目标上,能够主动监控本地资源和应用程序,并将收集到的数据报告给Zabbix Server。
2.Zabbix server:
是agent程序报告系统可用性、系统完整性和统计数据的核心组件,是所有配置信息、统计信息和操作数据的核心存储器。
3.Zabbix proxy:
可以替Zabbix Server收集性能和可用性数据。Proxy代理服务器是Zabbix软件可选择部署的一部分;当然,Proxy代理服务器可以帮助单台Zabbix Server分担负载压力。
4.WEB界面:
为了从任何地方和任何平台都可以轻松的访问Zabbix, 我们提供基于Web的Zabbix界面。该界面是Zabbix Server的一部分,通常(但不一定)跟Zabbix Server运行在同一台物理机器上。
5.数据库存储:
所有配置信息和Zabbix收集到的数据都被存储在数据库中。
6.Zabbix-sender:
主动提交方案,主动把数据提交给server或者proxy
7.Zabbix-java-gateway:
这个组件是可选安装的,Java网关功能,主要收集Java的性能指标
1.4、Zabbix工作架构
zabbix服务器:
user
chrome
|
zabbix-web-GUI
|
zabbix-database
|
| 协议 支持监控范围
zabbix-server <----IPMI-----> web page
<----agent----> OS:linux/windows
<--ICMP/SNMP--> device
<----PROXY----> web page
OS:linux/windows
device
二、构建Zabbix监控
2.1、初始化系统设置
1.关闭防火墙
[root@didi ~]# systemctl stop firewalld 关闭防火墙
[root@didi ~]# systemctl disable firewalld 开机不自启防火墙
2.关闭selinux
[root@didi ~]# setenforce 0 临时关闭
[root@didi ~]# sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/selinux/config 永久关闭
2.2、安装LAMP架构
1.安装mariadb数据库、httpd web服务器、php、php mysql连接程序
[root@10-255-20-182 ~]# yum install mariadb mariadb-server httpd php php-mysql -y
Installed:
httpd.x86_64 0:2.4.6-97.el7.centos mariadb.x86_64 1:5.5.68-1.el7 mariadb-server.x86_64 1:5.5.68-1.el7 php-mysql.x86_64 0:5.4.16-48.el7 php.x86_64 0:5.4.16-48.el7
2.检查是否安装完成
[root@10-255-20-182 ~]# rpm -qa | grep mariadb
mariadb-5.5.68-1.el7.x86_64
mariadb-server-5.5.68-1.el7.x86_64
mariadb-libs-5.5.68-1.el7.x86_64
[root@10-255-20-182 ~]# rpm -qa | grep php
php-cli-5.4.16-48.el7.x86_64
php-common-5.4.16-48.el7.x86_64
php-mysql-5.4.16-48.el7.x86_64
php-5.4.16-48.el7.x86_64
php-pdo-5.4.16-48.el7.x86_64
[root@10-255-20-182 ~]# rpm -qa | grep httpd
httpd-tools-2.4.6-97.el7.centos.x86_64
httpd-2.4.6-97.el7.centos.x86_64
3.启动
[root@10-255-20-182 ~]# systemctl start httpd
[root@10-255-20-182 ~]# systemctl start mariadb
[root@10-255-20-182 ~]# systemctl enable httpd
Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.
[root@10-255-20-182 ~]# systemctl enable mariadb
Created symlink from /etc/systemd/system/multi-user.target.wants/mariadb.service to /usr/lib/systemd/system/mariadb.service.
4.初始化mariadb数据库
[root@10-255-20-182 ~]# mysql_secure_installation
Enter current password for root (enter for none):
Set root password? [Y/n] y
Remove anonymous users? [Y/n] y
Disallow root login remotely? [Y/n] y
Remove test database and access to it? [Y/n] y
Reload privilege tables now? [Y/n] y
Thanks for using MariaDB!
2.3、安装Zabbix服务
1.安装zabbix源
[root@10-255-20-182 ~]# rpm -ivh https://repo.zabbix.com/zabbix/3.2/rhel/7/x86_64/zabbix-release-3.2-1.el7.noarch.rpm
2.导入zabbix秘钥
[root@10-255-20-182 ~]# rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-ZABBIX
3.安装zabbix服务
[root@10-255-20-182 ~]# yum install zabbix-server-mysql zabbix-web-mysql zabbix-agent -y
4.数据库新建
[root@10-255-20-182 ~]# mysql -u root -p
MariaDB [(none)]> create database zabbix character set utf8 collate utf8_bin;
Query OK, 1 row affected (0.00 sec)
MariaDB [(none)]> create user zabbix@localhost identified by 'zabbix';
Query OK, 0 rows affected (0.01 sec)
MariaDB [(none)]> grant all privileges on zabbix.* to zabbix@localhost;
Query OK, 0 rows affected (0.00 sec)
5.导入数据库
[root@10-255-20-182 ~]# cd /usr/share/doc/zabbix-server-mysql-3.2.11/
[root@10-255-20-182 zabbix-server-mysql-3.2.11]# ls
AUTHORS ChangeLog COPYING create.sql.gz NEWS README
[root@10-255-20-182 zabbix-server-mysql-3.2.11]# zcat create.sql.gz | mysql -uroot -p zabbix
6.更改配置文件
[root@10-255-20-182 ~]# vim /etc/zabbix/zabbix_server.conf
DBHost=127.0.0.1 #数据库对外的主机
DBName=zabbix #数据库名称
DBUser=zabbix #数据库用户
DBPassword=zabbix #数据库密码
DBPort=3306 #数据库启动端口
7.启动zabbix服务
[root@10-255-20-182 ~]# systemctl start zabbix-server
[root@10-255-20-182 ~]# systemctl enable zabbix-server
[root@10-255-20-182 ~]# systemctl enable mariadb
[root@10-255-20-182 ~]# systemctl start mariadb
8.zabbix前端配置php
[root@10-255-20-182 ~]# vim /etc/httpd/conf.d/zabbix.conf
php_value date.timezone Asia/Shanghai
[root@10-255-20-182 ~]# systemctl restart httpd
9.浏览器设置
xxx.xx.xx.xx/zabbix
初始账号:Admin 密码zabbix
三、添加监控主机/自动返现
3.1、添加被监控主机(zabbix服务端本机)
这里添加zabbix服务端试例
1.更改配置文件
[root@10-255-20-182 ~]# vim /etc/zabbix/zabbix_agentd.conf
Server=127.0.0.1 # 指明服务器是谁的
ServerActive=127.0.0.1 # 主动监控时的服务器
Hostname=127.0.0.1 # 自己能被server端识别的名称
2.启动zabbix客户端
[root@10-255-20-182 ~]# systemctl start zabbix-agent
[root@10-255-20-182 ~]# systemctl enable zabbix-agent
3.检查
[root@10-255-20-182 ~]# ss -anpt | grep 10050
LISTEN 0 128 *:10050 *:* users:(("zabbix_agentd",pid=2720,fd=4),("zabbix_agentd",pid=2719,fd=4),("zabbix_agentd",pid=2718,fd=4),("zabbix_agentd",pid=2717,fd=4),("zabbix_agentd",pid=2716,fd=4),("zabbix_agentd",pid=2715,fd=4))
4.web设置
配置---->主机---->创建主机
主机:
主机名称(zabbix-server)
可见名的称(zabbix服务器)
群组(zabbix servers)
agent代理程序的接口
IP地址:127.0.0.1
端口:10050
已启用
模板:
链接模板
http service (监控httpd模板)
ICMP ping (ping主机)
OS Linux (linux系统模板)
3.2、中文乱码解决
windows+r---->fonts
1.更名为linux指定的字符集格式
[root@10-255-20-182 ~]# mv msyh.ttc msyh.ttf
2.加上执行权限
[root@10-255-20-182 ~]# chmod a+x msyh.ttf
3.移到到zabbix字符集文件
[root@10-255-20-182 ~]# mv msyh.ttf /usr/share/zabbix/fonts/
4.字符集指向更改
[root@10-255-20-182 fonts]# vim /usr/share/zabbix/include/defines.inc.php
define('ZBX_GRAPH_FONT_NAME', 'msyh');
3.3、添加监控主机
1.下载agent rpm包
[root@192 ~]# wget http://repo.zabbix.com/zabbix/3.2/rhel/7/x86_64/zabbix-agent-3.2.1-1.el7.x86_64.rpm
2.安装
[root@192 ~]# yum install zabbix-agent-3.2.1-1.el7.x86_64.rpm
3.模拟环境
[root@192 ~]# yum install httpd -y
[root@192 ~]# systemctl start httpd
[root@192 ~]# echo "123" >/var/www/html/index.html
[root@wb ~]# elinks http://127.0.0.1/index.html --dump
123
4.修改zabbix agent端配置文件
[root@192 ~]# vim /etc/zabbix/zabbix_agentd.conf
Server=192.168.254.128
ServerActive=192.168.254.128
Hostname=192.168.0.129
[root@192 ~]# systemctl restart zabbix-agent
[root@192 ~]# systemctl enable zabbix-agent
5.检查端口
[root@192 ~]# ss -anpt | grep 10050
LISTEN 0
128 *:10050 *:* users:(("zabbix_agentd",pid=2720,fd=4),("zabbix_agentd",pid=2719,fd=4),("zabbix_agentd",pid=2718,fd=4),("zabbix_agentd",pid=2717,fd=4),("zabbix_agentd",pid=2716,fd=4),("zabbix_agentd",pid=2715,fd=4))
6.web设置
配置---->主机---->创建主机
主机:
主机名称(web)
可见名的称(web-1)
群组(apache)
agent代理程序的接口
IP地址:192.168.0.129
端口:10050
已启用
模板:
链接模板
http service (监控httpd模板)
ICMP ping (ping主机)
OS Linux (linux系统模板)
3.4、自动发现配置
需要配置自动发现跟动作规则
1.配置动作
web设置
配置--->动作--->创建动作(事件源选择为自动发现)
动作:
名称:webs上线
计算方式:和
触发条件:
主机IP地址 = 192.168.0.1-100
在线/不在线 >= 2
操作:
操作细节:
添加主机
添加到主机群组:apache
链接到模板 http service/icmp ping/os linux
启用主机
2.配置自动发现
配置--->自动发现--->创建发现规则
名称:webs上线
IP范围:192.168.0.1-100
延迟:10
检查:
ICMP ping
1、在被监控主机上找到配置文件
[root@192 ~]# vim /etc/zabbix/zabbix_agentd.conf
修改其中UserParameter
UserParameter=<key>,command
2、到界面添加监控项,其中键值和被监控主机上找到配置文件的key相同,
四、Web服务器-Nginx并发监控
4.1、安装配置nginx
1、安装nginx
[root@192 nginx-1.19.5]# ./configure --prefix=/opt/nginx --with-http_stub_status_module
[root@192 nginx-1.19.5]# make && make install
2.配置nginx监控模块
[root@192 nginx]# vim conf/nginx.conf
http{
server{
location /nginx-status {
stub_status on;
}
}
}
3.重载配置
[root@192 sbin]# ./nginx -t
[root@192 sbin]# ./nginx -s stop
[root@192 sbin]# ./nginx
4.获取nginx信息
[root@192 sbin]# elinks http:127.0.0.1/nginx-status --dump
Active connections: 1 server accepts handled requests 4 4 4 Reading: 0
Writing: 1 Waiting: 0
4.2、Nginx处理流程图
nginxaccetps++handled++
active -> waiting -> reading -> wrting -> requests++ 注释:Accepts(接受)、Handled(已处理)、Requests(请求数)是一直在增加的计数器。Active(活跃)、Waiting(等待)、Reading(读)、Writing(写)随着请求量而增减 Active :当前活跃的连接数。 Accepts: 接受的请求数 Handled: 处理的请求数(正常服务器响应,这两项应该是可以相等的) Requests: 客户端处理的请求数。(吞吐量) Reading: 当接收到请求时,连接离开 Waiting 状态,并且该请求本身使 Reading 状态计数增加。在这种状态下 NGINX 会读取客户端请求首部请求首部是比较小的因此这通常是一个快速的操作。 Writing: 请求被读取之后,其使 Writing 状态计数增加,并保持在该状态,直到响应返回给客户端。这意味着,该请求在 Writing 状态时, 一方面 NGINX 等待来自上游系统的结果(系统放在 NGINX “后面”),另外一方面NGINX 也在同时响应。请求往往会在 Writing 状态花费大量的时间。 Waiting: 活跃的连接也可以处 于 Waiting 子状态,如果有在此刻没有活跃请求的话。新连接可以绕过这个状态并直接变为到 Reading 状态,最常见的是在使用“accept filter(接受过滤器)” 和 “deferred accept(延迟接受)”时,在这种情况下,NGINX 不会接收 worker 进程的通知,直到它具有足够的数据才开始响应。如果连接设置为 keep-alive ,那么它在发送响应后将处于等待状态 nginx worker 进程接受 OS 的连接请求时 Accepts 计数器增加,而Handled 是当实际的请求得到连接时(通过建立一个新的连接或重新使用一个空闲的)。这两个计数器的值通常都是相同的,如果它们有差别则表明连接被Dropped, 往往这是由于资源限制,比如已经达到 nginx 的worker_connections的限制。
4.3、Nginx状态指标详解
名称 | 描述 | 指标类型 |
---|---|---|
Accepts(接受) | NGINX 所接受的客户端连接数 | 资源: 功能 |
Handled(已处理) | 成功的客户端连接数 | 资源: 功能 |
Active(活跃) | 当前活跃的客户端连接数 | 资源: 功能 |
Dropped(已丢弃,计算得出) | 丢弃的连接数(接受 - 已处理) | 工作:错误 |
Requests(请求数) | 客户端请求数 | 工作:吞吐量 |
4.4、Nginx脚本编写
1.编写脚本 [root@192 ~]# 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 2.测试 [root@192 ~]# chmod a+x nginx_status.sh [root@192 ~]# sh nginx_status.sh accepts 7
4.5、设置zabbix-agent脚本
1.更改配置文件 [root@192 ~]# mv nginx_status.sh /etc/zabbix/zabbix_agentd.d/ [root@192 ~]# vim /etc/zabbix/zabbix_agentd.conf UnsafeUserParameters=1 是否开启自定义脚本 UserParameter=nginx.status[*],/etc/zabbix/zabbix_agentd.d/nginx-status.sh $1 定义键值跟脚本位置 [root@192 ~]# systemctl restart zabbix-agent 2.服务端安装zabbix-get [root@10-255-20-182 ~]# wget http://repo.zabbix.com/zabbix/3.2/rhel/7/x86_64/zabbix-get-3.2.1-1.el7.x86_64.rpm [root@10-255-20-182 ~]# yum install zabbix-get -y 3.测试脚本 [root@10-255-20-182 ~]# /usr/bin/zabbix_get -s 192.168.254.128 -k 'nginx.status[ping]' 1
4.6、创建模板
创建模板 配置--->模板--->创建模板 模板名称:nginx 可见的名称:ngixn状态监控 新租的群组:nginx 创建监控项 配置--->模板--->模板名称--->监控项--->创建监控项 名称:nginx存活状态 键值:nginx.status[ping] 应用集:nginx 添加 创建触发器 配置--->模板--->模板名称--->触发器--->创建触发器 名称:nginx进程不存在 严重性:灾难 表达式: 添加--->监控项--->选择--->ping 功能:最新的T值<N N:1 插入 {web-nginx:nginx.status[ping].last()}<0 添加 创建图形 配置--->模板--->模板名称--->触发器--->创建图形 名称:nginx状态 监控项: 添加--->active/reading--->选择 添加
五、Web场景
1.创建web场景 配置--->主机--->web检测--->创建web场景 场景 名称:首页 客户端:chrome 步骤 添加 名称:index url:http://192.168.0.132/index.html 要求字符串:123 要求的状态码:200 添加 2.创建触发器 配置--->模板--->模板名称--->触发器--->创建触发器 名称:首页挂了 严重性:灾难 表达式: 添加--->监控项--->选择--->Response code for step "首页" of scenario "首页". 功能:最新的T值<N N:200 插入 添加