目录
1. Zabbix监控架构-CS架构
2. Zabbix极速上手指南
主机规划
2.1 部署ngx+php环境并测试
检查安装结果
2.2 部署数据库
2.3 编译安装zabbix-server服务端及后续配置
2.4 部署前端代码代码进行访问
前端的配置文件(连接数据库与主机名等信息)
2.5 欢迎来到zabbix
2.6 安装客户端
查看web页面的主机数据
2.7 zabbix显示中文乱码
3. zabbix 配置详解
3.1 服务端配置
3.2 zabbix agent vs zabbix agent2
4. 监控任意主机流程
4.1 配置客户端
4.2 web页面添加主机
4.2.1 创建主机
4.2.2 填写主机信息
4.2.3 耐心等待变绿
4.3 通过模板监控nginx
修改ngx模板的宏
5. 自定义监控
5.1 自定义监控全流程
5.2 客户端
5.3 服务端
5.4 web页面: 创建监控项
创建监控项
进行监控项测试
添加监控项完成,查看添加的监控项
编辑
添加监控项完成,查看最新数据与图形
编辑 5.5 web页面: 触发器
添加触发器
添加表达式
添加完成后的触发器配置
编辑 出现故障后的提示编辑
可以确认故障
编辑
配置图形名字与添加监控项编辑
6. 常用键值与触发器函数
6.1 键值
6.2 触发器函数
6.3 触发器依赖
7. 自定义监控-参数案例
使用命令书写和测试
web 添加监控项
编辑 web 触发器
8. 使用模板
8.1 创建模板
8.2 在模板中创建宏
编辑 8.3 检查模板信息
8.4 添加自定义监控项
进入主机中复制即可
选择要复制的监控项,选择复制即可(可批量多选)
选择复制到模板中
提示复制成功
检查模板中监控项部分:多了2个监控项 (nginx和root都做完显示两个)
8.5 复制触发器与图形
主机------>触发器
复制编辑
检查模板触发器
复制图形与复制触发器与监控项一致
8.6 模板关联主机
进入主机中,批量选择要添加模板的主机,批量更新
8.7 配置linux客户端键值
1. Zabbix监控架构-CS架构
2. Zabbix极速上手指南
主机规划
角色 | 主机名 | ip |
---|---|---|
Zabbix服务端 | zabbix_server_xzb | 10.0.0.62/172.16.1.62 |
Zabbix客户端 | zabbix_agent_xzb | 10.0.0.63/172.16.1.63 |
1. 系统:CentOS 7.x 不支持yum方式安装zabbix服务端4
2. 安装方式:
zabbix服务端编译安装
zabbix客户端yum安装
2.1 部署ngx+php环境并测试
##安装nginx
vim /etc/yum.repos.d/nginx.repo
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
yum install -y nginx
##安装php
curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
yum install epel-release.noarch -y
curl -o /etc/yum.repos.d/epel.repo https://mirrors.aliyun.com/repo/epel-7.repo
rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm
yum install php72w-cli php72w-fpm php72w-gd php72w-mbstring php72w-bcmath php72w-xml php72w-ldap php72w-mysqlnd -y
检查安装结果
##nginx配置
cat /etc/nginx/conf.d/zabbix.conf
server{
listen 80;
server_name zabbix.oldboylinux.cn;
root /app/code/zabbix;
location / {
index index.php;
}
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
##php配置
sed -ri '/^(user|group)/s#apache#nginx#g' /etc/php-fpm.d/www.conf
##进行检查
egrep '^(user|group)' /etc/php-fpm.d/www.conf
user = nginx
group = nginx
##创建目录创建测试文件
cat /app/code/zabbix/index.php
<?php
phpinfo();
?>
##启动服务与测试
systemctl enable nginx php-fpm
systemctl start nginx php-fpm
##测试web(hosts解析)
10.0.0.62 zabbix.oldboylinux.cn
2.2 部署数据库
zabbix 6.0 不支持 mariadb 5.5(默认源中的mariadb) 安装mariadb 10.5
##配置mariadb yum 源
vim /etc/yum.repos.d/mariadb.repo
[mariadb]
name=MariaDB
baseurl=https://mirrors.aliyun.com/mariadb/yum/10.5/centos7-amd64/
gpgkey=https://mirrors.aliyun.com/mariadb/yum/RPM-GPG-KEY-MariaDB
gpgcheck=1
enable=1
##安装
yum install -y mariadb-server
##启动
systemctl enable mariadb
systemctl start mariadb
##数据库初始化
mysql_secure_installation
先回车,前两个输入n,后面都是Y
# 创建数据库要指定字符集
create database zabbix charset utf8 collate utf8_bin;
##创建zabbix用户
grant all on zabbix.* to 'zabbix'@'localhost' identified by 'zabbix';
###如果数据库与zbx,php不在一起
grant all on zabbix.* to 'zabbix'@'172.16.1.%' identified by 'zabbix' ;
##向数据库中导入数据 表,数据 注意导入的顺序!!
tar xf zabbix-6.0.31.tar.gz
cd /zabbix-6.0.31/database/mysql
mysql zabbix <schema.sql
mysql zabbix <images.sql
mysql zabbix <data.sql
##检查 mysql的-e选项可以在命令行执行sql语句,注意以;结尾.
mysql -e 'show tables from zabbix;' |wc -l
179
2.3 编译安装zabbix-server服务端及后续配置
## 1. 安装依赖(软件包中已经包含)
yum install -y mysql-devel pcre-devel openssl-devel zlib-devel libxml2-devel net-snmp-devel net-snmp libssh2-devel OpenIPMI-devel libevent-devel openldap-devel libcurl-devel
## 2. 进行配置
##在源代码目录并且ls 可以看见configure文件
## --sysconfdir 指定配置文件目录 --enable-server 服务端
./configure sysconfdir=/etc/zabbix/ --enable-server --with-mysql --with-net-snmp --with-libxml2 --with-ssh2 --with-openipmi --with-zlib --with-libpthread --with-libevent --with-openssl --with-ldap --with-libcurl --with-libpcre
## 3. 根据提示执行make install
make instll
## 检查是否成功
echo $?
0
##修改zbx服务端配置文件(DB相关)
egrep -vn '^$|#' /etc/zabbix/zabbix_server.conf
12:ListenPort=10051
38:LogFile=/tmp/zabbix_server.log
87:DBHost=localhost
99:DBName=zabbix
115:DBUser=zabbix
123:DBPassword=zabbix
507:Timeout=4
593:LogSlowQueries=3000
708:StatsAllowedIP=127.0.0.1
##启动zabbix服务端
useradd -s /sbin/nologin -M zabbix ##添加个虚拟用户
zabbix_server ##启动zbx服务端
##检查端口
ss -lntup|grep 10051
##检查进程
ps -ef |grep zabbix
##书写systemctl 配置文件
[Unit]
Description=Zabbix Server with MySQL DB
After=syslog.target network.target
[Service]
Type=simple
ExecStart=/usr/local/sbin/zabbix_server -f
User=zabbix
[Install]
WantBy=multi-user.target
## 加载配置文件
systemctl daemon-reload
## 关闭手动启动的zabbix_server
pkill zabbix_server
## 检查是否关闭成功
ps -ef |grep zabbix
## 启动与检查
systemctl enable zabbix-server
systemctl start zabbix-server
systemctl status zabbix-server
2.4 部署前端代码代码进行访问
## 部署前端
cp -r ./ui/* /app/code/zabbix/
chown -R nginx.nginx /app/code/zabbix/
##web访问
10.0.0.62 zabbix.oldboylinux.cn
## 遇到错误修改php.ini
egrep -n '^(max_.*_time|post_max)' /etc/php.ini
368:max_execution_time = 300
378:max_input_time = 600
656:post_max_size = 80M
##重启php
systemctl restart php-fpm
##刷新页面,下一步
输入用户:Admin
密码:zabbix
前端的配置文件(连接数据库与主机名等信息)
2.5 欢迎来到zabbix
2.6 安装客户端
## 先让zabbix自己监控自己吧,所以我在服务端上安装zabbix_agent2
## 配置zabbix_agent2 yum源
vim/etc/yum.repos.d/zabbix.repo
[zabbix]
name=Zabbix
baseurl=https://mirror.tuna.tsinghua.edu.cn/zabbix/zabbix/6.0/rhel/7/x86_64/
enabled=1
gpgcheck=0
gpgkey=https://mirror.tuna.tsinghua.edu.cn/zabbix/zabbix/6.0/rhel/7/x86_64/RPM-GPG-KEY
## 安装zabbix_agent
yum install -y zabbix-agent2
##客户端的配置文件
egrep -v '^$|#' /etc/zabbix/zabbix_agent2.conf
PidFile=/run/zabbix/zabbix_agent2.pid
LogFile=/var/log/zabbix/zabbix_agent2.log
LogFileSize=0
Server=127.0.0.1 ##自己监控自己,如果是别的主机的话要改
ServerActive=127.0.0.1 ##自己监控自己,如果是别的主机的话要改
Hostname=Zabbix server
Include=/etc/zabbix/zabbix_agent2.d/*.conf
PluginSocket=/run/zabbix/agent.plugin.sock
ControlSocket=/run/zabbix/agent.sock
Include=./zabbix_agent2.d/plugins.d/*.conf
##启动
systemctl enable zabbix-agent2.service
systemctl start zabbix-agent2.service
查看web页面的主机数据
2.7 zabbix显示中文乱码
原因:zbx显示中文的字体有问题,导致显示中文异常。
解决:把zbx中文字体替换即可。
cd /app/code/zbx/assets/fonts/
##上传一个中文的ttf字体替换zabbix自用的字体即可
cp /code/zabbix/assets/fonts/DejaVuSans.ttf{,.bak}
cp msyh.ttc /app/code/zabbix/assets/fonts/DejaVuSans.ttf
3. zabbix 配置详解
3.1 服务端配置
文件和目录 | 说明 |
---|---|
/etc/zabbix/zabbix_server.conf | 配置文件 |
/var/log/zabbix/zabbix_server.log | 当前放在/tmp/下面 |
/usr/lib/systemd/system/zabbix-server.service | 手写的systemctl管理文件 如果yum、rpm安装自带 |
/usr/local/share/zabbix/alertscripts/ | 用于实现告警的脚本 |
##zabbix服务端配置文件详解
grep '^[a-Z]' /etc/zabbix/zabbix_server.conf
ListenPort=10051 ##服务端端口
LogFile=/tmp/zabbix_server.log ##日志文件
DBHost=localhost ##数据库地址
DBName=zabbix ##数据库名字
DBUser=zabbix ##数据库用户名
DBPassword=zabbix ##数据密码
Timeout=4 ##超时时间
##zabbix客户端配置
/etc/zabbix/zabbix_agent2.conf ##配置文件
/etc/zabbix/zabbix_agent2.d/ ##子配置文件目录,用于自定义监控
/var/log/zabbix ##日志
##zabbix客户端配置文件内容
Server=172.16.1.62 ##指定服务端地址
3.2 zabbix agent vs zabbix agent2
在任何一台服务器上面安装zabbix-agent ,zabbix-agent2
zabbix_agent | zabbix_agent2 | |
---|---|---|
开发语言 | C语言 | Go语言和C语言 |
性能 | 独立进程方式运行 | 1个进程多线程技术运行, 减少资源消耗占用较少tcp资源,能够承受更高并发 |
4. 监控任意主机流程
4.1 配置客户端
##1. 安装
#参考服务端安装zabbix—agent2的方法
##2. 配置
sed -i 's#Server=127.0.0.1#Server=172.16.1.62#g' /etc/zabbix/zabbix_agent2.conf ##改为服务端地址
sed -i 's#ServerActive=127.0.0.1#ServerActive=172.16.1.62#g' /etc/zabbix/zabbix_agent2.conf ##改为服务端地址
##3. 启动
systemctl enable zabbix-agent2
systemctl start zabbix-agent2
4.2 web页面添加主机
4.2.1 创建主机
4.2.2 填写主机信息
4.2.3 耐心等待变绿
4.3 通过模板监控nginx
##
cat /etc/nginx/conf.d/status.conf
server {
listen 8000;
location / {
stub_status;
}
}
curl http://localhost:8000
curl http://localhost:8000/status
修改ngx模板的宏
{$NGINX.STUB_STATUS.HOST} localhost
{$NGINX.STUB_STATUS.PATH} /
{$NGINX.STUB_STATUS.PORT} 8000
##web页面查看
5. 自定义监控
5.1 自定义监控全流程
## 客户端
## 1. linux: 通过命令、脚本取出对应的值
## 2. linux:根据zbx要求按照格式,书写配置文件,创建键值 ##键值key用于获取客户端数据
## 3. linux:重启客户端客户端测试键值是否可用 ##zabbix_agent2 -t
## 服务端
## 4. linux:服务端测试键值是否可用 ## zabbix_get
## 5. web页面: 键值与监控项关联
## 6. web页面: 测试
## 7. web页面:触发器(报警) ##是否发出警告需要根据情况决定是否设置
5.2 客户端
##1. 通过命令、脚本取出对应的值
##监控80端口是否存在? 自定义监控
ss -lntup |grep -w 80 |wc -l
## 创建键值与重启
##UserParameter=key,cmd
##UserParameter=固定写法,表示要自定义键值key表示键值名字,命名最好就是 单词+"." (点)
##cmd表示命令或脚本
##写入自定义key(键值)
vim /etc/zabbix/zabbix_agent2.d/web.conf
UserParameter=check.nginx,ss -lntup|grep -w 80 |wc -l
##2. 重启客户端
systemctl restart zabbix-agent2.service
##3. 客户端本地测试键值
zabbix_agent2 -t check.nginx
check.nginx
[s|1] ##s表示类型文字 | 1表示结果 键值的结果
##提示zabbix_agent2.conf里面有
Include=/etc/zabbix/zabbix_agent2.d/*.conf
5.3 服务端
##服务端手动测试
yum install -y zabbix-get zabbix_get -s 172.16.1.63 -p 10050 -k check.nginx
## -s 客户端ip地址 -p 客户端端口号(默认是10050) -k 指定键值
5.4 web页面: 创建监控项
创建监控项
进行监控项测试
添加监控项完成,查看添加的监控项
添加监控项完成,查看最新数据与图形
5.5 web页面: 触发器
添加触发器
添加表达式
添加完成后的触发器配置
出现故障后的提示
可以确认故障
##监控项键值获取的数据 等于 0 表示异常
##什么条件下出现故障 zbx 6.x的写法
last(/zabbix_agent_xzb/check.nginx)=0 #last() 函数表示最后1个结果
last(/zabbix_agent_xzb/check.nginx)=0 ##zabbix_agent_xzb主机的web.port.80的结果中的最后一个如果是0,则有故障
##zbx 5.x及之前的写法
{zabbix_agent_xzb:check.nginx.last() } = 0
{主机:key.功能} = 0
配置图形名字与添加监控项
6. 常用键值与触发器函数
6.1 键值
常用键值 | 说明 |
---|---|
agent.hostname | 主机名 获取的是客户端配置文件中指定的主机名 |
system.hostname | 主机名 系统的主机名 类似于hostname |
agent.ping | 服务端与客户端是否通畅 通:1 不通:非1 |
net.if.in[if,] | 网络接口上传(进入)流量统计。返回 整数 if表示网卡名字 可以忽略 |
net.if.out[if,] | 流出流量统计。返回整数 |
proc.num[,,,,] | 进程数 返回整数 name 进程名字 user 用户 state 进程状态 cmdline 进程对应的命令 |
zabbix_get -s 172.16.1.63 -p 10050 -k proc.num[,,zomb]
zabbix_get -s 172.16.1.63 -p 10050 -k net.if.in[eth0]
zabbix_get -s 172.16.1.63 -p 10050 -k proc.num[nginx]
zabbix_get -s 172.16.1.63 -p 10050 -k net.tcp.port[,port]
zabbix_get -s 172.16.1.63 -p 10050 -k net.tcp.port[,80]
zabbix_get -s 172.16.1.63 -p 10050 -k agent.hostname
zabbix客户端键值传送门:
1 Zabbix agenthttps://www.zabbix.com/documentation/6.0/zh/manual/config/items/itemtypes/zabbix_agent
6.2 触发器函数
1. 写在触发器表达式中.用于设置报警条件.
2. 触发器函数要结合键值(监控项)
功能(函数) | 说明 |
---|---|
last() | 最近值 (最新的值),取出最近一些值 |
nodata() | 是否有数据 |
diff() | 是否发生变化 一般配合md5check() |
avg() | 平均值 |
min() | 最小值 |
max() | 最大值 |
##书写触发器案例 swap
##条件swap总大小大于0
last(/zabbix_agent_xzb/system.swap.size[,total])>0
###条件swap当前使用的大小大于0(没有直接可以使用的监控项,这里调整为当前swap空闲率小于100)
last(/zabbix_agent_xzb/system.swap.size[,pfree])<100
##表示并且-a = and -o = or
#完整的表达
last(/zabbix_agent_xzb/system.swap.size[,total])>0 and last(/zabbix_agent_xzb/system.swap.size[,pfree])<100
6.3 触发器依赖
3 触发器依赖关系https://www.zabbix.com/documentation/6.0/zh/manual/config/triggers/dependencies
7. 自定义监控-参数案例
使用命令书写和测试
##客户端
## 书写键值key
UserParameter=user.login.check[*],lastlog |grep -w "$1" |awk '{print $$3}'
##如果使用自定义键值传参,awk取列的时候要使用$$列。
##如果没有传参,awk正常使用即可
##重启客户端
systemctl restart zabbix agent2.service
zabbix_agent2 -t user.login.check[root]
##服务端
zabbix_get -s 172.16.1.63 -k user.login.check[root]
web 添加监控项
web 触发器
8. 使用模板
8.1 创建模板
8.2 在模板中创建宏
8.3 检查模板信息
8.4 添加自定义监控项
进入主机中复制即可
选择要复制的监控项,选择复制即可(可批量多选)
选择复制到模板中
提示复制成功
检查模板中监控项部分:多了2个监控项 (nginx和root都做完显示两个)
8.5 复制触发器与图形
主机------>触发器
复制
检查模板触发器
复制图形与复制触发器与监控项一致
8.6 模板关联主机
进入主机中,批量选择要添加模板的主机,批量更新
8.7 配置linux客户端键值
分发键值到配置文件
重启zabbix客户端
9. 邮件报警
9.1 个人邮箱准备
9.2 配置发件人
报警媒介
添加发件人信息
告警邮件内容
##故障类型 问题
##主题 故障名称: {EVENT.NAME}
##消息
故障始于 时间: {EVENT.TIME} 日期: {EVENT.DATE}
故障名称: {EVENT.NAME}
故障主机: {HOST.NAME}
严重程度: {EVENT.SEVERITY}
额外信息: {EVENT.OPDATA}
故障ID: {EVENT.ID}
触发器地址: {TRIGGER.URL}
##消息类型 ##问题恢复
##主题 ## 故障已经解决 时间: {EVENT.RECOVERY.TIME} 日期: {EVENT.RECOVERY.DATE}
##消息
故障名称: {EVENT.NAME}
故障持续时间: {EVENT.DURATION}
故障主机: {HOST.NAME}
故障级别: {EVENT.SEVERITY}
故障ID: {EVENT.ID}
{TRIGGER.URL}
9.3 进行测试
测试发送信息(内容和主题随意)
9.4 配置收件人
添加收件人信息
配置收件人
配置完成
9.5 什么条件下给用户发送邮件?(条件/动作)
触发器动作(启用即可)
制造故障检查仪表盘
进阶
触发器修改
10. 换个角度看监控
10.1 Zabbix客户端概述
zabbix客户端 | 应用场景 |
---|---|
Zabbix-agent2 | 适用于几乎所有情况,支持自定义监控,linux,windows, android/ios |
SNMP客户端 | 用于监控网络设备: Simple Network Management Protocal 简单网络管理协议 监控网络设备 |
JMX | Java-gateway 监控java app(tomcat), 未来推荐自定义监控(zabbix_agents2 + jmap/jstats) |
IPMI | 监控硬件(物理服务器,联想(IBM X86架构 ThinkServer) ,华为,浪潮,Dell,IBM,HP) 直接使用自定义监 控(ipmitool + megacli ) |
10.2 Zabbix-agent监控windows/mac
下载地址:Download Zabbix agentshttps://www.zabbix.com/cn/download_agents?version=6.0+LTS&release=6.0.31&os=Windows&os_version=Any&hardware=amd64&encryption=OpenSSL&packaging=MSI&show_legacy=0#tab:44
安装windows客户端
检查
10.3 监控windows
创建主机
11. 监控java应用
方案1. 开启java jmxremote远程监控功能,zabbix中关联对应的模板,安装与开启java工具zabbix-java-gateway
方案2. 通过java命令,自定义监控获取想要指标,通过在java应用服务器安装zabbix agent和java命令(jmap,jstack),然后自定义监控。
11.1 方案01 原理图
11.2 方案02 原理图(类似于自定义监控)
11.3 方案01 实战
##开启远程监控功能
vim tomcat/bin/catalina.sh
##在125行后添加
CATALINA_OPTS="$CATALINA_OPTS \
-Dcom.sun.management.jmxremote \
-Dcom.sun.management.jmxremote.port=12345 \
-Dcom.sun.management.jmxremote.authenticate=false \
-Dcom.sun.management.jmxremote.ssl=false \
-Djava.rmi.server.hostname=172.16.1.9" ##tomcat主机内网地址
##重启tomcat
systemctl restart tomcat.service
##查看进程中是否有以上的饿命令
ps -ef |grep java
zabbix服务端部署java gateway 配置
##服务端部署 zabbix-java-gateway
yum install -y zabbix-java-gateway
##启动
systemctl enable zabbix-java-gateway.service
systemctl start zabbix-java-gateway.service
##配置 将监听端口打开
grep -n '^[a-Z]' /etc/zabbix/zabbix_java_gateway.conf
17:LISTEN_PORT=10052
27:PID_FILE="/var/run/zabbix/zabbix_java_gateway.pid"
##重启zabbix-java-gateway
systemctl restart zabbix-java-gateway.service
##配置zabbix 服务端的配置文件
grep -n 'Java*' /etc/zabbix/zabbix_server.conf
317:JavaGateway=127.0.0.1
325:JavaGatewayPort=10052
333:StartJavaPollers=5
##重启zabbix服务端
systemctl restart zabbix-server.service
##检查java poller进程
ps -ef |grep zabbix_server |grep java
添加主机
12. 自动化
1. 自动添加主机并关联模板
2. 自动添加主机方案:
自动发现(服务端 主动):zabbix服务端 主动去找是否有新的主机,如果有则添加进来,关联模板。
自动注册(客户端 主动):zabbix客户端 主动去找服务端提交自己的信息,请求向服务端注册。
12.1 自动发现
1. 客户端(zabbix-agent),配置文件.
2. web配置自动发现规则. -发现主机
3. web配置自动发现的动作-发现主机后关联模板,添加主机,加入主机组,启用
12.2 客户端(zbx agent),配置文件
ansible实现 playbook yum template
参考我的ansible文章: 网站集群批量管理-Ansible(playbook)-CSDN博客
12.3 web配置自动发现规则