zabbix入门
第一章 监控知识基本概述
1.1 为什么要使用监控
1.对系统不间断实时监控
2.实时反馈系统当前状态
3.保证服务可靠性安全性
4.保证业务持续稳定运行
1.2 如何进行监控,比如我们需要监控磁盘的使用率
1.如何查看磁盘使用率 df -h
2.监控磁盘的那些指标 block、 inode
3.如何获取具体的信息 df -h|awk ‘//(NF-1)’
4.获取的数值到达多少报警 80%
1.3 流行的监控工具
1.Zabbix
2.Lepus(天兔)数据库监控系统
3.Open-Falcon 小米开源监控系统
4.Prometheus(普罗米修斯, Docker、 K8s)
1.4 如果去到一家新公司,如何入手监控
1.硬件监控 路由器、交换机、防火墙
2.系统监控 CPU、内存、磁盘、网络、进程、 TCP
3.服务监控 nginx、 php、 tomcat、 redis、 memcache、 mysql
4.WEB监控 请求时间、响应时间、加载时间
5.日志监控 ELk(收集、存储、分析、展示) 日志易
6.安全监控 Firewalld、 WAF(Nginx+lua)、安全宝、牛盾云、安全狗
7.网络监控 smokeping 多机房
8.业务监控 活动引入多少流量、产生多少注册量、带来多大价值
第二章 单机时代如何监控
2.1 传统监控相关命令
CPU 监控命令: w、 top、 htop、 glances
%Cpu(s): 0.3 us, 0.3 sy, 0.0 ni, 99.3 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
us 用户态: 跟用户的操作有关 %
sy 系统态: 跟内核的处理有关 %
id CPU 空闲:
内存监控命令: free
[root@m01 ~]# free -h
total used free shared buff/cache available
Mem: 977M 105M 724M 6.6M 148M 729M
Swap: .0G 0B .0G
磁盘监控命令: df、 iotop
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
sda 0.80 25.32 33.36
设备名 每秒传输次数 每秒读大小 每秒写大小 读的总大小 写的总大小
网络监控命令: ifconfig、 route、 glances、 iftop、 nethogs、 netstat
单位换算
Mbps 100Mbps/
MB 12MB
iftop 中间的<= =>这两个左右箭头,表示的是流量的方向。
TX:发送流量、 RX:接收流量、 TOTAL:总流量
#查看 TCP11 中状态
netstat -an|grep ESTABLISHED
netstat -rn # 查看路由信息
netstat -lntup
2.2 传统监控痛点
随着时间的推移,用户不断的增多,服务随时可能扛不住会被 oom(out of memory),当系统内存不足的时候,就会触发 oom
1.当系统内存不足的时候就会大量使用 swap
2.当系统大量使用 swap 的时候,系统会特别卡
注意: 有时可能内存还有剩余 300Mb-500Mb,但会发现 swap 依然被使用
2.3 使用Shell脚本监控
那单机时代,如何使用 shell 脚本来实现服务器的监控
需求: 每隔 1 分钟监控一次内存,当你的可用内存低于 100m,发邮件报警,要求显示剩余内存
1.怎么获取内存可用的值 free -m|awk ‘/^Mem/{print $NF}’
2.获取到内存可用的值如何和设定的阈值进行比较
3.比较如果大于 100m 则不处理,如果小于 100 则报警
4.如何每隔 1 分钟执行一次
[root@ZabbixServer ~]# cat free.sh
#!/usr/bin/bash
HostName=$(hostname)_$(hostname -i)
Date=$(date +%F)
while true;do
Free=$(free -m|awk '/^Mem/{print $NF}')
if [ $Free -le ];then
echo "$Date: $HostName Mem Is < ${Free}MB"
fi
sleep
done
shell脚本监控
第三章 zabbix 监控快速安装
2.1 安装mariadb
2.1.1 安装官方最新版mariadb
由于官网的MariaDB版本要比阿里云的版本要高,所以我们应该优先使用官方的版本
.首先在RHEL/CentOS和Fedora操作系统中添加MariaDB的yum配置文件MariaDB.repo文件。
# 编辑创建mariadb.repo仓库文件
vim /etc/yum.repos.d/MariaDB.repo .添加repo仓库配置
[mariadb]
name=MariaDB
baseurl=http://yum.mariadb.org/10.1/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck= .当 MariaDB 仓库地址添加好后,你可以通过下面的一行命令轻松安装 MariaDB。
yum install MariaDB-server MariaDB-client -y
安装最新mariadb
2.1.2 使用阿里云源安装Mariadb
# 如果官方的下载网速太慢,我们就使用阿里云低版本的mariadb数据库
.删除或者重命名刚才创建的Mariadb.repo文件
cd /etc/yum.repos.d
mv Mariadb.repo Mariadb.repo.bak .配置阿里云源
参考链接: https://developer.aliyun.com/mirror .一条命令安装Mariadb
yum install mariadb-server mariadb -y
2.1.3 安装好了之后,使用systemctl进行mariadb服务管理
systemctl start mariadb #启动MariaDB
systemctl stop mariadb #停止MariaDB
systemctl restart mariadb #重启MariaDB
systemctl enable mariadb #设置开机启动
2.1.4 初始化mariadb
mysql_secure_installation
--为root用户设置密码
--删除匿名账号
--取消root用户远程登录
--删除test库和对test库的访问权限
--刷新授权表使修改生效
[root@localhost ~]# mysql_secure_installation
NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MySQL
SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY!
In order to log into MySQL to secure it, we'll need the current
password for the root user. If you've just installed MySQL, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.
Enter current password for root (enter for none):<–初次运行直接回车
OK, successfully used password, moving on…
Setting the root password ensures that nobody can log into the MySQL
root user without the proper authorisation.
Set root password? [Y/n] #是否设置root用户密码,输入y并回车或直接回车
New password: #设置root用户的密码
Re-enter new password: #再输入一次你设置的密码
Password updated successfully!
Reloading privilege tables..
… Success!
By default, a MySQL installation has an anonymous user, allowing anyone
to log into MySQL without having to have a user account created for
them. This is intended only for testing, and to make the installation
go a bit smoother. You should remove them before moving into a
production environment.
Remove anonymous users? [Y/n] #是否删除匿名用户,生产环境建议删除,所以直接回车
… Success!
Normally, root should only be allowed to connect from 'localhost'. This
ensures that someone cannot guess at the root password from the network.
Disallow root login remotely? [Y/n] #是否禁止root远程登录,根据自己的需求选择Y/n并回车,建议禁止
… Success!
By default, MySQL comes with a database named 'test' that anyone can
access. This is also intended only for testing, and should be removed
before moving into a production environment.
Remove test database and access to it? [Y/n] #是否删除test数据库,直接回车
- Dropping test database…
… Success!
- Removing privileges on test database…
… Success!
Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.
Reload privilege tables now? [Y/n] #是否重新加载权限表,直接回车
… Success!
Cleaning up…
All done! If you've completed all of the above steps, your MySQL
installation should now be secure.
Thanks for using MySQL!
[root@localhost ~]#
运行mysql_secure_installation会执行几个设置
2.1.5 优先解决中文无法正常显示的问题
.停掉mariadb服务
systemctl stop mariadb
修改配置文件vim /etc/my.cnf
[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci
log-error=/var/log/mysqld.log
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
写入到/etc/my.cnf中
2.2 配置zabbix仓库
[root@m01 ~]# rpm -Uvh https://mirror.tuna.tsinghua.edu.cn/zabbix/zabbix/4.4/rhel/7/x86_64/zabbix-release-4.4-1.el7.noarch.rpm
[root@m01 ~]# yum clean all
[root@m01 ~]# yum makecache fast
2.3 安装 Zabbix 程序包,以及 MySQL、前端、代理
[root@m01 ~]# yum -y install zabbix-server-mysql zabbix-web-mysql zabbix-nginx-conf zabbix-agent
注意:nginx软件包在官方存储库中不可用。可以在epel资料库中找到。
yum -y install epel-release
2.4 创建 Zabbix 数据库以及用户
[root@m01 ~]# mysql -uroot -predhat
MariaDB [(none)]> create database zabbix character set utf8 collate utf8_bin;
MariaDB [(none)]> grant all privileges on zabbix.* to zabbix@localhost identified by 'zabbix';
MariaDB [(none)]> flush privileges;
创建Zabbix数据库以及用户
2.5 导入 Zabbix 数据至数据库中
[root@m01 ~]# zcat /usr/share/doc/zabbix-server-mysql*/create.sql.gz | mysql -uzabbix -p zabbix
2.6 配置Zabbix服务器数据库
编辑/etc/zabbix/zabbix_server.conf 文件,修改数据库配置
[root@m01 ~]# cat /etc/zabbix/zabbix_server.conf
DBHost=localhost
DBName=zabbix
DBUser=zabbix
DBPassword=zabbix
配置Zabbix服务器数据库
2.7 为zabbix前端配置PHP
编辑文件/etc/nginx/conf.d/zabbix.conf,取消注释并设置’listen’和’server_name’指令。
listen ;
server_name 10.0.0.9;
编辑文件/etc/php-fpm.d/zabbix.conf,取消注释并设置正确的时区。
php_value[date.timezone] = Asia/Shanghai
2.8 启动 Zabbix 服务进程,并加入开机自启动
[root@m01 ~]# systemctl restart zabbix-server zabbix-agent nginx php-fpm
[root@m01 ~]# systemctl enable zabbix-server zabbix-agent nginx php-fpm
第四章 WEB安装步骤
4.1浏览器打开地址:http://10.0.0.9/setup.php
4.2 检查依赖项是否存在异常
4.3 配置zabbix连接数据库
4.4 配置 ZabbixServer 服务器的信息
4.5 最终确认检查
4.6 安装成功
提示已成功地安装了 Zabbix 前端。配置文件/etc/zabbix/web/zabbix.conf.php 被创建。
4.7 登陆zabbix
默认登陆 ZabbixWeb 的用户名 Admin,密码 zabbix
4.8 调整字符集为中文
查看仪表盘
4.9 修复中文乱码
打开图形之后会发现语言为乱码,原因是缺少字体
解决方法:安装字体并替换现有字体
[root@m01 ~]# yum install wqy-microhei-fonts -y
[root@m01 ~]# cp /usr/share/fonts/wqy-microhei/wqy-microhei.ttc /usr/share/zabbix/http://images.lxh1.com/zabbix/fonts/graphfont.ttf
解决方法:用Windows的字体替换现有字体
.从Windows控制面板->字体->选择一种中文简体->复制粘贴到某个文件中
.找到服务器上面zabbix的字体文件夹
find / -name fonts
cd /usr/share/zabbix/assets/fonts/
# 查看原有字体(graphfont.ttf),并改名
ls
mv graphfont.ttf graphfont.ttf.bk
# 利用Xshell将windows中拷贝的字体粘贴进去
.将defines.inc.php里面的原有字体替换成现在的
find / -name defines.inc.php
vim /usr/share/zabbix/include/defines.inc.php
(vim使用命令行编辑模式,全局替换字体)
:%s/graphfont/simhei/g
.刷新网页,字体就正常显示了
如果没有中文显示就给simhei添加权限 chmod simhei.ttf
方法2从windows电脑传过来
再次刷新发现已经变成中文了
第五章 Zabbix 监控基础架构
zabbix-agent(数据采集)—>zabbix-server(数据分析|报警)—> 数据库(数据存储)—>zabbix web(数据展示)
第六章 zabbix 快速监控主机
6.1安装zabbix-agent
[root@web01 ~]# rpm -ivh https://mirror.tuna.tsinghua.edu.cn/zabbix/zabbix/4.4/rhel/7/x86_64/zabbix-agent-4.4.1-1.el7.x86_64.rpm
6.2配置zabbix-agent
[root@web01 ~]# cat /etc/zabbix/zabbix_agentd.conf
PidFile=/var/run/zabbix/zabbix_agentd.pid
LogFile=/var/log/zabbix/zabbix_agentd.log
LogFileSize=
Server=10.0.0.9
ServerActive=127.0.0.1
Hostname=Zabbix server
Include=/etc/zabbix/zabbix_agentd.d/*.conf
配置zabbix-agent
6.3 启动zabbix-agent并检查
[root@web01 ~]# systemctl start zabbix-agent.service
[root@web01 ~]# systemctl enable zabbix-agent.service
[root@web01 ~]# netstat - tunlp | grep
启动zabbix-agent并检查
6.4 zabbix-web界面,添加主机
点击创建主机, 填写以下主机信息
再点击并选择模板
第七章 自定义监控主机小试身手
7.1 监控需求
监控TCP11种状态集
7.2 命令行实现
[root@web01 ~]# netstat -ant | grep -c TIME_WAIT [root@web01 ~]# netstat -ant | grep -c LISTEN
7.3 编写zabbix监控文件(传参形式)
[root@web01 ~]# cat /etc/zabbix/zabbix_agentd.d/tcp_status.conf
或
[root@web01 ~]# cat /etc/zabbix/zabbix_agentd.d/userparameter_mysql.conf
UserParameter=tcp_state[*],netstat -ant|grep -c $
UserParameter=TIME_WAIT,netstat -ant|grep -c TIME_WAIT
root@web01 ~]# systemctl restart zabbix-agent
编写zabbix监控文件(传参形式)
7.4 server端进行测试
[root@m01 ~]# rpm -ivh https://mirrors.tuna.tsinghua.edu.cn/zabbix/zabbix/4.0/rhel//x86_64/zabbix-release-4.0-.el7.noarch.rpm
[root@m01 ~]# yum install zabbix-get.x86_64 -y
[root@m01 ~]# zabbix_get -s 10.0.0.8 -k tcp_state[TIME_WAIT] [root@m01 ~]# zabbix_get -s 10.0.0.8 -k tcp_state[LISTEN]
server端进行测试
7.5 web端添加
添加tcp_state监控项
点击图形查看状态
用同样的方式再添加一个TIME_WAIT监控项
查看TIME_WAIT状态
7.6 克隆监控项
由于TCP有多种状态,需要添加多个监控项,我们可以使用克隆快速达到创建的效果
但前提是配置文件里面除了监控名称,其他都一样,例:
[root@web01 ~]# cat /etc/zabbix/zabbix_agentd.d/userparameter_mysql.conf
UserParameter=TIME_WAIT,netstat -ant|grep -c TIME_WAIT
UserParameter=LISTEN,netstat -ant|grep -c LISTEN
添加好配置文件后,注意需要重启zabbix-agent端
其他的状态依次添加即可
7.7 创建图形
7.8 查看图形
7.9 设置触发器
点击创建触发器
第八章 邮件报警
8.1 定义发件人
编辑Email报警配置
8.2 定义收件人
8.3 自定义报警内容
定制报警内容:
https://www.zabbix.com/documentation/4.0/zh/manual/appendix/macros/supported_by_location
参考博客
https://www.cnblogs.com/bixiaoyu/p/7302541.html
发送警告
报警邮件标题可以使用默认信息,亦可使用如下中文报警内容
名称:Action-Email
默认标题:故障{TRIGGER.STATUS},服务器:{HOSTNAME1}发生: {TRIGGER.NAME}故障!
告警主机:{HOSTNAME1}
告警时间:{EVENT.DATE} {EVENT.TIME}
告警等级:{TRIGGER.SEVERITY}
告警信息: {TRIGGER.NAME}
告警项目:{TRIGGER.KEY1}
问题详情:{ITEM.NAME}:{ITEM.VALUE}
当前状态:{TRIGGER.STATUS}:{ITEM.VALUE1}
事件ID:{EVENT.ID}
发送告警
恢复警告
恢复标题:恢复{TRIGGER.STATUS}, 服务器:{HOSTNAME1}: {TRIGGER.NAME}已恢复!
恢复信息:
告警主机:{HOSTNAME1}
告警时间:{EVENT.DATE} {EVENT.TIME}
告警等级:{TRIGGER.SEVERITY}
告警信息: {TRIGGER.NAME}
告警项目:{TRIGGER.KEY1}
问题详情:{ITEM.NAME}:{ITEM.VALUE}
当前状态:{TRIGGER.STATUS}:{ITEM.VALUE1}
事件ID:{EVENT.ID}
恢复告警
第九章 微信报警
9.1 查看配置文件里的脚本目录路径
[root@m01 ~]# grep "^AlertScriptsPath" /etc/zabbix/zabbix_server.conf
AlertScriptsPath=/usr/lib/zabbix/alertscripts
9.2 将weixin.py放在zabbix特定目录
[root@m01 /usr/lib/zabbix/alertscripts]# ll
总用量
-rwxr-xr-x root root 8月 : weixin.py
9.3 配置发信人
添加微信报警,配置脚本参数
{ALERT.SENDTO} # 动作
{ALERT.SUBJECT} # 标题
{ALERT.MESSAGE} # 消息
9.4 配置收信人
9.5 登陆企业微信公众号添加账户
https://work.weixin.qq.com/wework_admin/loginpage_wx
1.登陆后在企业号上新建应用
2.上传logo,填写应用名称 ,应用介绍等
3.查看启动应用
同时会生成应用的AgentId以及Secret,这个在后面步骤会有用
4.接口调用测试
http://work.weixin.qq.com/api/devtools/devtool.php
这里的corpid为公司ID
Corpsecret就是刚才创建应用生成的Secrt,确认没问题填写进去然后下一步
如果没问题会显示200状态码
9.6 添加成员
9.7 关注公众号
9.8 查看自己的账号
9.9 修改脚本里的信息
[root@m01 /usr/lib/zabbix/alertscripts]# cat weixin.py
..............
corpid='微信企业号corpid'
appsecret='应用的Secret'
agentid=应用的id
..............
9.10 发信测试
[root@m01 /usr/lib/zabbix/alertscripts]# python weixin.py 你的账号 '发信测试' ‘微信测试消息’
例:
python weixin.py '发信测试' ‘微信测试消息’
9.11 微信号上查看
9.12 配置文件权限(非常重要)
在脚本里面有写日志的功能,所以zabbix用户要有日志文件的所有权限
9.13 发送到整个微信组
虽然我们实现了发送到单个用户的功能,但是如果我们的用户比较多,这样还是麻烦的,不过我们可以发送到整个组,其实脚本里已经预留好了配置,只不过默认注释了。
将脚本修改为以下内容,注释掉用户,打开组设置
#!/usr/bin/env python import requests
import sys
import os
import json
import logging logging.basicConfig(level = logging.DEBUG, format = '%(asctime)s, %(filename)s, %(levelname)s, %(message)s',
datefmt = '%a, %d %b %Y %H:%M:%S',
filename = os.path.join('/tmp','weixin.log'),
filemode = 'a')
corpid='wwd80fafb6320e1efa'
appsecret='Bhf89FnZfMu0e7l8i4yagnAR5Z9TCqKknYbx-SFQvmg'
agentid= token_url='https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=' + corpid + '&corpsecret=' + appsecret
req=requests.get(token_url)
accesstoken=req.json()['access_token'] msgsend_url='https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=' + accesstoken #touser=sys.argv[]
toparty=sys.argv[]
subject=sys.argv[]
message=sys.argv[] + "\n\n" +sys.argv[3] params={
#"touser": touser,
"toparty": toparty,
"msgtype": "text",
"agentid": agentid,
"text": {
"content": message
},
"safe":0
} req=requests.post(msgsend_url, data=json.dumps(params)) logging.info('sendto:' + toparty + ';;subject:' + subject + ';;message:' + message)
发送到微信组脚本
9.14 发送到所有用户脚本
#!/bin/bash
name=$(cat name.txt) for ok in ${name}
do
python weixin.py ${ok} "$1" "$2"
done
发送到所有用户脚本
9.15 随机发送到指定用户脚本
#!/bin/bash
num=$(echo $(($RANDOM%+)))
name=$(sed -n "${num}p" name.txt)
ok_boy=$(grep -v "${name}" name.txt) for ok in ${ok_boy}
do
python weixin.py ${ok} "$1" "$2"
done
随机发送到指定用户脚本
第十章 自定义模版(新版本不支持)
10.1 监控TCP11种状态
编写zabbix配置文件, 添加以下内容
[root@web01 ~]# vim /etc/zabbix/zabbix_agentd.d/userparameter_mysql.conf
UserParameter=ESTABLISHED,netstat -ant|grep -c 'ESTABLISHED'
UserParameter=SYN_SENT,netstat -ant|grep -c 'SYN_SENT'
UserParameter=SYN_RECV,netstat -ant|grep -c 'SYN_RECV'
UserParameter=FIN_WAIT1,netstat -ant|grep -c 'FIN_WAIT1'
UserParameter=FIN_WAIT2,netstat -ant|grep -c 'FIN_WAIT2'
UserParameter=TIME_WAIT,netstat -ant|grep -c 'TIME_WAIT'
UserParameter=CLOSE,netstat -ant|grep -c 'CLOSE'
UserParameter=CLOSE_WAIT,netstat -ant|grep -c 'CLOSE_WAIT'
UserParameter=LAST_ACK,netstat -ant|grep -c 'LAST_ACK'
UserParameter=LISTEN,netstat -ant|grep -c 'LISTEN'
UserParameter=CLOSING,netstat -ant|grep -c 'CLOSING'
编写添加zabbix配置
10.2 重启zabbix-agent
[root@web01 ~]# systemctl restart zabbix-agent
10.3 测试监控项
使用zabbix-get命令测试
[root@m01 ~]# yum install zabbix-get.x86_64 -y
[root@tiger-vm- alertscripts]# zabbix_get -s 10.0.0.8 -k ESTABLISHED [root@tiger-vm- alertscripts]# zabbix_get -s 10.0.0.8 -k LISTEN
测试监控项
10.4 导入模版文件
10.5 主机关联模版文件
10.6 查看最新数据
10.7 查看图形
jianshu
第十一章 自定义模版监控nginx状态
11.1 开启监控页面并访问测试
[root@web01 ~]# cat /etc/nginx/conf.d/status.conf
server {
listen ;
server_name localhost;
location /nginx_status {
stub_status on;
access_log off;
}
} [root@web01 ~]# curl 127.0.0.1/nginx_status/
Active connections:
server accepts handled requests Reading: Writing: Waiting:
开启监控页面并访问测试
11.2 准备nginx监控状态脚本
[root@web01 /etc/zabbix/zabbix_agentd.d]# cat nginx_monitor.sh
#!/bin/bash
NGINX_COMMAND=$
CACHEFILE="/tmp/nginx_status.txt"
CMD="/usr/bin/curl http://127.0.0.1/nginx_status/"
if [ ! -f $CACHEFILE ];then
$CMD >$CACHEFILE >/dev/null
fi
# Check and run the script
TIMEFLM=`stat -c %Y $CACHEFILE`
TIMENOW=`date +%s` if [ `expr $TIMENOW - $TIMEFLM` -gt ]; then
rm -f $CACHEFILE
fi
if [ ! -f $CACHEFILE ];then
$CMD >$CACHEFILE >/dev/null
fi nginx_active(){
grep 'Active' $CACHEFILE| awk '{print $NF}'
exit ;
}
nginx_reading(){
grep 'Reading' $CACHEFILE| awk '{print $2}'
exit ;
}
nginx_writing(){
grep 'Writing' $CACHEFILE | awk '{print $4}'
exit ;
}
nginx_waiting(){
grep 'Waiting' $CACHEFILE| awk '{print $6}'
exit ;
}
nginx_accepts(){
awk NR== $CACHEFILE| awk '{print $1}'
exit ;
}
nginx_handled(){
awk NR== $CACHEFILE| awk '{print $2}'
exit ;
}
nginx_requests(){
awk NR== $CACHEFILE| awk '{print $3}'
exit ;
} 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 credentials';
exit ;
esac
nginx监控状态脚本
11.3 编写zabbix监控配置文件
[root@web01 ~]# cat /etc/zabbix/zabbix_agentd.d/nginx_status.conf
UserParameter=nginx_status[*],/bin/bash /etc/zabbix/zabbix_agentd.d/nginx_monitor.sh $ # 重启agent端
[root@web01 ~]# systemctl restart zabbix-agent.service
11.4 使用zabbix_get取值
[root@m01 ~]# zabbix_get -s 10.0.1.7 -k nginx_status[accepts]
11.5 导入模版
11.6 链接模版
11.7 查看数据
第十二章 自定义模版监控php状态
12.1 开启监控页面
[root@web01 ~]# tail - /etc/php-fpm.d/www.conf
pm.status_path = /php_status [root@web01 ~]# cat /etc/nginx/conf.d/status.conf
server {
listen ;
server_name localhost;
location /nginx_status {
stub_status on;
access_log off;
} location /php_status {
fastcgi_pass 127.0.0.1:;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME html$fastcgi_script_name;
include fastcgi_params;
}
} [root@web01 ~]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@web01 ~]# systemctl restart nginx.service php-fpm.service
开启监控页面
12.2 访问测试
[root@web01 ~]# curl 127.0.0.1/php_status
pool: www
process manager: dynamic
start time: /Aug/::: +
start since:
accepted conn:
listen queue:
max listen queue:
listen queue len:
idle processes:
active processes:
total processes:
max active processes:
max children reached:
slow requests:
访问测试
12.3 准备访问脚本
[root@web01 ~]# cat /etc/zabbix/zabbix_agentd.d/fpm.sh
#!/bin/bash
##################################
# Zabbix monitoring script
#
# php-fpm:
# - anything available via FPM status page
#
##################################
# Contact:
# vincent.viallet@gmail.com
##################################
# ChangeLog:
# VV initial creation
################################## # Zabbix requested parameter
ZBX_REQ_DATA="$1"
ZBX_REQ_DATA_URL="$2" # Nginx defaults
NGINX_STATUS_DEFAULT_URL="http://localhost/fpm/status"
WGET_BIN="/usr/bin/wget" #
# Error handling:
# - need to be displayable in Zabbix (avoid NOT_SUPPORTED)
# - items need to be of type "float" (allow negative + float)
#
ERROR_NO_ACCESS_FILE="-0.91"
ERROR_NO_ACCESS="-0.92"
ERROR_WRONG_PARAM="-0.93"
ERROR_DATA="-0.94" # either can not connect / bad host / bad port # Handle host and port if non-default
if [ ! -z "$ZBX_REQ_DATA_URL" ]; then
URL="$ZBX_REQ_DATA_URL"
else
URL="$NGINX_STATUS_DEFAULT_URL"
fi # save the nginx stats in a variable for future parsing
NGINX_STATS=$($WGET_BIN -q $URL -O - >/dev/null) # error during retrieve
if [ $? -ne -o -z "$NGINX_STATS" ]; then
echo $ERROR_DATA
exit
fi #
# Extract data from nginx stats
#
#RESULT=$(echo "$NGINX_STATS" | awk 'print $0;match($0, "^'"$ZBX_REQ_DATA"':[[:space:]]+(.*)", a) { print a[1] }')
#RESULT=$(echo "$NGINX_STATS" | grep "$ZBX_REQ_DATA" | awk -F : '{print $2}')
RESULT=$(echo "$NGINX_STATS" | awk -F : "{if(\$1==\"$ZBX_REQ_DATA\") print \$2}")
if [ $? -ne -o -z "$RESULT" ]; then
echo $ERROR_WRONG_PARAM
exit
fi echo $RESULT exit [root@web01 ~]# bash /etc/zabbix/zabbix_agentd.d/fpm.sh "total processes" http://127.0.0.1/php_status
准备访问脚本
12.4 准备zabbix配置文件
[root@web01 ~]# cat /etc/zabbix/zabbix_agentd.d/fpm.conf
UserParameter=php-fpm[*],/etc/zabbix/zabbix_agentd.d/fpm.sh "$1" "$2"
[root@web01 ~]# systemctl restart zabbix-agent.service
12.5 使用zabbix_get取值
[root@m01 ~]# zabbix_get -s 10.0.1.7 -k php-fpm["total processes",http://127.0.0.1/php_status]
12.6 导入模版
导入之后需要修改一下模版里的宏配置
第十三章 WEB监控
需求,监控页面状态码
添加Web场景
配置步骤:
第十四章 故障记录
故障1
故障现象:
提示zabbix-server is not running
报错日志:
::202215.171 database is down: reconnecting in seconds
::202225.172 [Z3001] connection to database 'zabbix' failed: [] Access denied for user 'zabbix'@'localhost' (using password: NO)
故障原因:
zabbix-server的配置文件里配有配置数据库密码
故障解决:
添加正确的数据库账号密码信息
[root@m01 ~]# grep "^DB" /etc/zabbix/zabbix_server.conf
DBHost=localhost
DBName=zabbix
DBUser=zabbix
DBPassword=zabbix
故障2
故障现象:微信报警失败
报错日志:
[root@m01 ~]# tail -f /var/log/zabbix/zabbix_server.log
Problem name: TIME_WAIT过多
Host: web01
Severity: Average Original problem ID:
'": Traceback (most recent call last):
8 File "/usr/lib/zabbix/alertscripts/weixin.py", line 7, in <module>
9 import requests
10 ImportError: No module named requests
微信报警日志
问题原因:
缺少模块 requests
问题解决:
安装缺失的依赖包
[root@m01 ~]# yum install python-pip
[root@m01 ~]# pip install --upgrade pip
[root@m01 ~]# pip install requests
故障3
故障现象:
在server端使用zabbix_get命令测试键值命令时提示警告
[root@m01 ~]# zabbix_get -s 10.0.1.7 -k ESTABLISHED
(Not all processes could be identified, non-owned process info
will not be shown, you would have to be root to see it all.)
问题原因:
zabbix_agent是以普通用户zabbix运行的,而普通用户执行netstat -antp时会有警告,网上查找发现只要不是用p参数就可以以普通用户运行
解决方案:
监控脚本里的命令修改为netstat -ant
转自虎哥:https://www.lxh1.com/2019/12/09/linux/zabbix%E7%9B%91%E6%8E%A7%E6%9C%8D%E5%8A%A1/
zabbix入门的更多相关文章
- zabbix入门知识
zabbix入门知识 zabbix中文手册 https://www.zabbix.com/documentation/3.4/manual/ 1.zabbix介绍 Zabbix 是一个企业级的分布式开 ...
- 25.Zabbix入门必备
==Zabbix入门必备== 1.配置zabbix源 [root@zabbix ~]# cat /etc/yum.repos.d/zabbix.repo [zabbix] name=Zabbix Of ...
- zabbix入门之配置邮件告警
zabbix入门之配置邮件告警 邮件环境搭建 使用本地邮箱账号发送邮件 zabbix-server 端安装 mailx .sendmail或者psotfix 服务,系统默认安装好了postfix #安 ...
- zabbix入门之定义触发器
zabbix入门之定义触发器 触发器的概念 触发器的定义:界定某特定的item 采集到数据的非合理区间或非合理状态.通常为逻辑表达式. 逻辑表达式(阈值):通常用于定义数据的不合理区间,其结果如下: ...
- zabbix入门之监控MySQL
zabbix入门之监控MySQL 这里使用的是zabbix官方自带的MySQL监控模板. 首先确保在被监控主机安装zabbix-agent.zabbix-sender,并且将主机加入监控节点.具体操作 ...
- zabbix入门之添加监控项
zabbix入门之添加监控项 添加一个不带参数的监控项(system.cpu.switches) 进入"配置"-->"主机"选择某主机的"监控项 ...
- zabbix入门到精通之Zabbix对linux主机的监控
我们大概了解了怎么对台主机进行监控,主要步骤设计到添加主机,并且为主机添加监控项,这里主要为item,然后在item的基础上对item进行绘图并且通过screen的方式把不同的监控图像汇总到一张scr ...
- zabbix入门之使用QQ邮箱接受报警信息
首先说明我使用的是3.2版本的zabbix 既然要发邮件到QQ邮箱报警,那么在centos7上就肯定需要安装发送邮件的软件了 安装应用yum install mailx sendmail -y接着修改 ...
- centos7之zabbix入门(一)
初始化状态如下 首先按照下面的步骤进行,主机名和可见名可以自己起,dns那里最好也填一下,其它默认就可以了 点击确认后,自动跳转到以下页面 可以看到zbx那里没有亮起来,说明还没有配置成功,接下来点击 ...
随机推荐
- ThinkPHP6框架的下载与安装
thinkphp6发布也有一段时间了,相对来说比较稳定,是时候学习一下thinkphp6框架,提前学习,到正式发布的时候,可以直接拿来做正式的项目,先人一步.thinkPHP6.0在5.1的基础上对底 ...
- adb 控制手机动作
下载adb工具包,解压即可 https://download.csdn.net/download/kai402458953/10784310 各种事件说明:https://blog.csdn.n ...
- Oracle 两个逗号分割的字符串,获取交集、差集的sql实现过程解析
Oracle数据库的两个字段值为逗号分割的字符串,例如:字段A值为“1,2,3,5”,字段B为“2”.想获取两个字段的交集(相同值)2,获取两个字段的差集(差异值)1,3,5. 一.最终实现的sql语 ...
- mysql忧化参数
转自 https://blog.51cto.com/tongcheng/1710265以下参数是在mysql-5.6.27中使用,可能mysql版本不同使用方法不一样1.线程参数innodb_read ...
- C/C++ 变量的本质分析
1. 程序通过变量来申请和命名内存空间. int a=0; //申请一个大小为int型的内存空间,这个内存空间取名叫a,申请的内存空间里存储0 2. 可以通过变量名访问变量的内存空间. 3. 修改变量 ...
- Redis安装和基本操作
Redis 简介Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库. Redis 是属于非关系型数据库1.数据比模型较简单2.需要灵活性更强的IT系统3.对数据库性能 ...
- LeetCode 5365. 可被三整除的最大和 Greatest Sum Divisible by Three
地址 https://www.acwing.com/solution/leetcode/content/6340/ 题目描述给你一个整数数组 nums,请你找出并返回能被三整除的元素最大和. 示例 : ...
- Where does Oracle SQL Developer store connections? oracle SQL Developer 连接信息保存的位置,什么地方
oracle SQL Developer 连接信息保存的位置,在什么地方? 在切换登录用户后,oracle SQL Developer 连接信息不见了.只要以前的用户信息还存在,可以在路径 C:\Us ...
- 推荐几个公众号Markdown格式化网站
好多人都喜欢用 Markdown 写文 但是公众号后台编辑又不支持 Markdown 因此,催生出了一系列 Markdown 渲染格式化的工具网站 我使用了其中的一些 分享给你 1.Md2All 官方 ...
- swoole4创建Mysql连接池
一 .什么是mysql连接池 场景:每秒同时有1000个并发,但是这个mysql同时只能处理400个连接,mysql会宕机. 解决方案:连接池,这个连接池建立了200个和mysql的连接,这100 ...