一、Zabbix介绍
Zabbix是一个企业级解决方案,支持实时监控数千台服务器,虚拟机和网络设备,采集百万级监控指标,适用于任何IT基础架构、服务、应用程序和资源的解决方案
二、Zabbix架构
SERVER
- Zabbix server 是 Zabbix 软件的核心组件
- Zabbix Agent 向其报告可用性、系统完整性信息和统计信息。
- Zabbix serve r也是存储所有配置信息、统计信息和操作信息的核心存储库。
- Zabbix server也是Zabbix监控系统的告警中心。在监控的系统中出现任何异常,将发出通知给管理员。
基本的 Zabbix Server 的功能分解成为三个不同的组件。他们是:Zabbix server、Web前端和数据库。
tips:
Zabbix 的所有配置信息都存储在 Server和Web前端进行交互的数据库中。例如,当你通过Web前端(或者API)新增一个监控项时,它会被添加到数据库的监控项表里。然后,Zabbix server 以每分钟一次的频率查询监控项表中的有效项,接着将它存储在 Zabbix server 中的缓存里。这就是为什么 Zabbix前端所做的任何更改需要花费两分钟左右才能显示在最新的数据段的原因。
数据库
- 所有配置信息以及 Zabbix 采集到的数据都被持久存储在数据库中
- 可以支持MySQL,PostgreSQL,Oracle 等多种数据库
WEB 界面
- WEB 界面是 Zabbix server 的一部分,用于实现展示和配置的界面通常(但不一定)和 Zabbix server 运行在同一台物理机器上基于 Apache(Nginx)+PHP 实现,早期只支持LAMP架构,从Zabbix5.0开始支持LNMP
AGENT
- Zabbix agents 部署在被监控目标上,用于主动监控本地资源和应用程序,并将收集的数据发送给Zabbix server。从Zabbix5.0开始支技Zabbix Agent2
PROXY
- Zabbix Proxy 可以代替 Zabbix Server 采集性能和可用性数据
- Zabbix Proxy 在 Zabbix 的部署是可选部分
- Zabbix Proxy 的部署可以很好的分担单个Zabbix server的负载
Java 网关
- Zabbix 要监控 tomcat 服务器和其它JAVA程序,需要使用 Java gateway 做为代理,才能从JAVA程序中获取数据
三、Zabbix术语
被监控: 即 Zabbix 监控的主机或设备
监控项item:即 Zabbix 监控的相关指标,比如:CPU利用率,内存使用率,TCP连接数等
- 监控内容
应用集Application:为方便管理众多的监控项,可将多个同类型的监控项进行归类,纳入一个集合中,即应用集
触发器Trigger:是一个表达式,或者说一个条件,如磁盘利用率超过80%等,当触发条件后,会导致一个触发事件,这个事件会执行一个或多个动作
告警:当触发器和动作二者结合起来时,就构成了的告警机制,比如cpu的使用率达到80%以上,触发了报警动作,系统将自动发送一封邮件到指定的邮箱。然后运维可以及时的去处理此错误 host—> items—> triggers --> action
Web 监测:对WEB服务进行检测,比如:访问指定网站是否可正常访问
模板 Template: 可以方便地应用于多个主机的一组实体的集合。而这些实体包括:
- items(监控项)
- applications(应用集)
- triggers(触发器)
- graphs(图形)
- screens (聚合图形,自Zabbix 2.0起)
使用模板是减少工作量并简化Zabbix配置的好方法。
模板分为内置模板和自定义模板
四、编译安装zabbix
#解决依赖关系
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
yum install gcc libxml2-devel net-snmp net-snmp-devel curl curl-devel php php-bcmath php-mbstring mariadb mariadb-devel libevent-devel java-1.8.0-openjdk-devel -y
#建立管理用户
groupadd zabbix
useradd -g zabbix zabbix
#解压包
tar xf zabbix-4.0.30.tar.gz
#编译安装主要组件 server agent java-gateway
./configure --prefix=/apps/zabbix_server --enable-server --enable-agent --with-mysql --with-net-snmp --with-libcurl --with-libxml2 --enable-java
make
make install
客户端安转agent
./configure --prefix=/apps/zabbix --enable-agent
数据库可以安装在本地也可以分离
yum install mariadb-server.x86_64 -y
systemctl start mariadb
mysql_secure_installation 安全加固脚本
#输入当前密码
#修改root密码
#移除匿名用户
#移除测试数据库
#不让 root 远程登录
#刷新
mysql -uroot -p
create database zabbix character set utf8 collate utf8_bin;
create user zabbix@localhost identified by 'zabbix';
grant all privileges on zabbix.* to zabbix@localhost;
set global log_bin_trust_function_creators = 1;
quit;
导入zabbix数据库文件
cd /data/zabbix-4.0.30/database/mysql
mysql -uzabbix -pzabbix zabbix < schema.sql
mysql -uzabbix -pzabbix zabbix < images.sql
mysql -uzabbix -pzabbix zabbix < data.sql
#必须最后 导入 data.sql
安装web apapche
yum install httpd -y
systemctl start httpd
cd /data/zabbix-4.0.30/frontends/php/
cp -a /data/zabbix-4.0.30/frontends/php/ /var/www/html/zabbix/
# 将前端页面拷贝过去
#浏览器访问
ip/zabbix
修改zabbix配置
vim /apps/zabbix_server/etc/zabbix_server.conf
118 行修改 下 密码 其他不用修改
118 DBPassword= zabbix
grep "^[a-Z]" /apps/zabbix_server/etc/zabbix_server.conf
LogFile=/tmp/zabbix_server.log
DBName=zabbix_server
DBUser=zabbix
DBPassword=zabbix
LogSlowQueries=3000
准备service文件
vim /usr/lib/systemd/system/zabbix-server.service
[Unit]
Description=Zabbix Server
After=syslog.target
After=network.target
[Service]
Environment="CONFFILE=/apps/zabbix_server/etc/zabbix_server.conf"
EnvironmentFile=-/etc/default/zabbix-server
Type=forking
Restart=on-failure
PIDFile=/tmp/zabbix_server.pid
KillMode=control-group
ExecStart=/apps/zabbix_server/sbin/zabbix_server -c $CONFFILE
ExecStop=/bin/kill -SIGTERM $MAINPID
RestartSec=10s
TimeoutSec=infinity
User=zabbix
Group=zabbix
[Install]
WantedBy=multi-user.target
chown zabbix:zabbix /apps/zabbix_server/ -R
systemctl daemon-reload
systemctl start zabbix-server.service
systemctl status zabbix-server.service
升级php版本
yum install php-gettext php-xml php-net-socket php-gd php-mysql -y
修改php 软件的配置
vim /etc/php.ini
384 max_execution_time = 300
394max_input_time = 600
672 post_max_size = 16M
878 date.timezone = Asia/Shanghai
#改完 以后
systemctl restart httpd
最后浏览器访问zabbix登录
192.168.10.101/zabbix
默认用户名:Admin
密码: zabbix
五、zabbix监控案例实战
- 自定义监控项
- 通过脚本采集监控项数据
- zabbix agent获取监控项数据
- 自定义模板和图形及触发器
- 验证数据
1.监控nginx
对nginx的活动连接和当前状态等运行状态进行监控
需要先安装好nginx
#修改nginx配置文件
vim /etc/nginx/nginx.conf
location /status {
stub_status;
}
nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
systemctl restart nginx
curl 192.168.10.101/status
准备nginx监测脚本
vim /data/nginx.sh
#!/bin/bash
nginx_status_fun() { # 函数内容
NGINX_PORT=$1 # 端口,函数的第一个参数是端口号
NGINX_COMMAND=$2 # 命令,函数的第二个参数是命令
nginx_active() { # 获取nginx_active数量
/usr/bin/curl "http://127.0.0.1:$NGINX_PORT/status/" 2>/dev/null | grep 'Active connections' | awk '{print $3}'
}
nginx_reading() {
/usr/bin/curl "http://127.0.0.1:$NGINX_PORT/status/" 2>/dev/null | grep 'Reading' | awk '{print $2}'
}
nginx_writing() {
/usr/bin/curl "http://127.0.0.1:$NGINX_PORT/status/" 2>/dev/null | grep 'Writing' | awk '{print $4}'
}
nginx_waiting() {
/usr/bin/curl "http://127.0.0.1:$NGINX_PORT/status/" 2>/dev/null | grep 'Waiting' | awk '{print $6}'
}
nginx_accepts() {
/usr/bin/curl "http://127.0.0.1:$NGINX_PORT/status/" 2>/dev/null | awk 'NR==3' | awk '{print $1}'
}
nginx_handled() {
/usr/bin/curl "http://127.0.0.1:$NGINX_PORT/status/" 2>/dev/null | awk 'NR==3' | awk '{print $2}'
}
nginx_requests() {
/usr/bin/curl "http://127.0.0.1:$NGINX_PORT/status/" 2>/dev/null | awk 'NR==3' | awk '{print $3}'
}
case $NGINX_COMMAND in
active)
nginx_active
;;
reading)
nginx_reading
;;
writing)
nginx_writing
;;
waiting)
nginx_waiting
;;
accepts)
nginx_accepts
;;
handled)
nginx_handled
;;
requests)
nginx_requests
;;
*)
echo "Invalid command: $NGINX_COMMAND"
;;
esac
}
main() { # 主函数内容
case $1 in
nginx_status)
nginx_status_fun $2 $3
;;
*)
echo "Usage: $0 {nginx_status key}"
;;
esac
}
main $1 $2 $3
#测试脚本
bash nginx.sh nginx_status 80 active
1
#第一个参数 nginx_status
#第二个参数 80 端口
#第三个参数 active 获取的状态
#状态类型:
#reading
#writing
#waiting
#accepts
#handled
#requests
修改配置文件
vim /apps/zabbix/etc/zabbix_agentd.conf
UserParameter=nginx_status[*],/usr/bin/bash /data/nginx.sh $1 $2 $3
#在主服务器上测试
zabbix_get -s 192.168.91.102 -p 10050 -k "nginx_status["nginx_status","80","active"]"
1
登入web上的zabbix创建自定义模版
创建自定义模版完成后就可以应用在nginx主机上了