day061-全网监控
文章目录
- 0. 老男孩思想-人生四行
- 1. 面试题:使用监控服务,监控了什么?
- 1.1 按照用户访问顺序监控
- 1.2 安装服务器层次监控
- 2. 监控DNS
- 2.1 监控脚本
- 2.2 添加键值
- 2.3 前端定义监控
- 3. 监控域名和ssl证书过期时间
- 3.1 监控脚本
- 3.2 添加键值
- 3.3 前端定义监控
- 4. 云监控-拨测工具
- 5. 监控tengine
- 5.1 配置nginx自带状态监控
- 5.2 前端配置tengine自定义监控
- 5.3 为模板监控项增添标记
- 5.4 修改监控项(相关项)
- 5.4.1 [Get stub status page](javascript:void(0)): [Version](javascript:void(0))
- 5.4.2 [Get stub status page](javascript:void(0)): [Requests total](javascript:void(0))
- 5.4.3 [Get stub status page](javascript:void(0)): [Requests per second](javascript:void(0))
- 5.4.4 [Get stub status page](javascript:void(0)): [Connections dropped per second](javascript:void(0))
- 5.5 主机增添模板
- 6. 负载均衡监控
- 6.1 配置负载均衡参数
- 6.2 编写监控脚本
- 6.3 添加键值
- 7. 监控keepalived是否切换
- 7.1 编写脚本
- 7.2 添加键值
- 8. 监控nginx日志状态码
- 8.1 编写脚本
- 8.2 添加键值
- 9. web场景监控
- 9.1 前端配置web监测
- 9.2 添加触发器
- 10. php服务监控
- 10.1 添加nginx监控配置参数
- 10.2 修改php配置文件
- 10.3 cul测试
- 10.4 修改php模板
- 11. 数据库监控
- 12. 思维导图
0. 老男孩思想-人生四行
判断自己有没有能力,就看有几个“行”!
(1)自己要行
(2)要有人认为你行
(3)认为你行的人也很行
(4)身体要行
1. 面试题:使用监控服务,监控了什么?
- 2个维度监控
- 第1个维度:用户访问流程维度(数据流/业务流)
- 第2个维度:某个层次上/某个服务器上具体监控的内容:模板+自定义监控
- 物理层监控(风扇,温度,raid)
- 系统层监控(cpu,内存,磁盘网络,负载…用户,软件包)
- 服务监控(nginx,php,java,tomcat,db,…)
- 代码/业务监控(web场景监控,curl/wget)
- API接口监控
1.1 按照用户访问顺序监控
监控内容 | 详细内容 | 监控方案 |
---|---|---|
DNS | 解析是否正常 | 自定义监控—ping/dig/nslookup 域名:whois查看过期时间 SSL证书:openssl / curl -Lsv 查看域名证书过期时间 |
CDN缓存 | 是否可用; 查看命中率 | 登录前端web页面:查看命中率、流量、带宽 分布式ping: 商业:监控宝、听云 免费网站: www.17ce.com 、ping.chinaz.com 开源软件:smokeping |
防火墙和网络设置 | 监控流量、带宽、端口 | snmp协议 |
负载服务器 | nginx服务情况、证书过期时间、 网站访问量、并发情况 | nginx/haproxy/keepalived服务状态:自定义模板 SSL证书:自定义监控、模板 网站访问量(运营):ip,pv,uv(网站第三方插件实现百度统计)、 matomo(php、piwiki) 并发量:统计80、443端口连接数 负载均衡健康检查模式:upstream_check、自定义监控 状态码数量/错误连接数:查看访问日志/错误日志 |
web服务器 | 主要监控服务情况 | 具体的服务使用对应的模板即可 nginx、tomcat、php、jar包 |
数据库 | redis/mysql | 使用模板即可 写入内容,读取写入的内容 |
存储服务 | NFS | 自定义监控:存储目前多少空间,能否使用; 模拟挂在,创建文件检查结果 |
备份 | 备份的数据量 | 自定义监控:系统是否有备份,发送邮件 |
- ip:独立 IP 地址数
- pv:独立访客数
- uv:页面浏览量
1.2 安装服务器层次监控
监控内容 | 详细内容 | 具体实现方案 |
---|---|---|
API接口监控 | 监控指定的API接口,如zabbix api; 开发提供的内部接口、外部第三方接口 | curl命令、web场景、监测 |
业务、应用、app监控 | 检查应用是否可用,书写测试代码页面 | curl命令、web场景、监测 |
服务监控 | 基本:进程、端口 专有:服务的状态 日志:错误日志(error/failed/exception) | 模板或根据具体要求自定义监控 |
系统监控 | cpu、负载、内存、磁盘、网络、带宽、IO、 关键文件是否变化(aide) 僵尸进程 是否有非堡垒机登录 | 模板+自定义监控(僵尸进程,用户异地登录、 堡垒机登录、aide、hm、日志secure) |
硬件监控 | 温度、风扇转速、raid状态 | zabbix自带:ipmi/自定义监控 Linux命令:ipmitool/megacli |
2. 监控DNS
- 自定义监控
2.1 监控脚本
[root@lb01.oldboy.cn /server/scripts]# cat check_dns.sh
#!/bin/bash
##############################################################
# File Name:check_dns.sh
# Version:V1.0
# Author:SunKexu
# Organization:www.oldboyedu.com
# Desc:
##############################################################
#1.vars
url=$1#2.判断是否为域名
#2.检查nslookup命令是否存在
which nslookup &>/dev/null || {yum install -y bind-utils
}
#3.检查
if nslookup $url &>/dev/null ;then#输出1表示可以使用echo "1"
else#输出0echo "0"
fi
2.2 添加键值
[root@lb01.oldboy.cn ~]# cat /etc/zabbix/zabbix_agent2.d/dns.conf
UserParameter=check.dns[*],/bin/bash /server/scripts/check_dns.sh "$1"
2.3 前端定义监控
3. 监控域名和ssl证书过期时间
3.1 监控脚本
[root@lb01.oldboy.cn /server/scripts]# cat check_https_expire.sh
#!/bin/bash
##############################################################
# File Name:check_https_expire.sh
# Version:V1.0
# Author:SunKexu
# Organization:www.oldboyedu.com
# Desc:
##############################################################
#1.vars
export LANG=en_US.UTF-8#检查域名过期
check_domain() {local expire_date=`whois $url |egrep "Expiry|Expiration" |awk -F ": " '{print $2}'`local exprire_date_second=`date -d "${expire_date}" +%s`local date_second_now=`date +%s`local date_expire_days=`echo "(${exprire_date_second} - ${date_second_now} )/60/60/24" |bc`echo "$date_expire_days"}#检查证书过期
check_https() {#这里还可以加入curl判断.local expire_date=`curl -v https://www.$url |& grep expire |awk -F ": |GMT" '{print $2}'`local exprire_date_second=`date -d "${expire_date}" +%s`local date_second_now=`date +%s`local date_expire_days=`echo "(${exprire_date_second} - ${date_second_now} )/60/60/24" |bc`echo "$date_expire_days"}#main
main() {choice=$1url=$2case "$choice" indomain)check_domain ;;https)check_https ;;esac
}main $*
3.2 添加键值
[root@lb01.oldboy.cn /server/scripts]# cat /etc/zabbix/zabbix_agent2.d/dns.conf
UserParameter=check.dns[*],/bin/bash /server/scripts/check_dns.sh "$1"
UserParameter=check.domain_https[*],sudo sh /server/scripts/check_https_expire.sh "$1" "$2"
3.3 前端定义监控
4. 云监控-拨测工具
- 地址:
[云监控控制台](https://cloudmonitornext.console.aliyun.com/disposableTest)
5. 监控tengine
5.1 配置nginx自带状态监控
[root@lb01.oldboy.cn /server/scripts]# nginx -version
Tengine version: Tengine/3.1.0
nginx version: nginx/1.24.0# 为默认域名配置监控状态参数
[root@lb01.oldboy.cn /server/scripts]# cat /etc/nginx/conf.d/default.conf
server {listen 80 default_server;server_name localhost;default_type text/plain;location / {#return 200 "website is ok";index index.html;}location /status {#allow 221.218.213.9 ;allow 127.0.0.1;allow 10.0.0.1;allow 172.16.1.0/24;deny all;stub_status;}
}
5.2 前端配置tengine自定义监控
- zabbix自带nginx监控模板,直接修改nginx模板即可
5.3 为模板监控项增添标记
- 标记就是类型
5.4 修改监控项(相关项)
- 主要项的键值:
web.page.get["{$NGINX.STUB_STATUS.HOST}","{$NGINX.STUB_STATUS.PATH}","{$NGINX.STUB_STATUS.PORT}"]
- 相当于:
[root@lb01.oldboy.cn ~]# zabbix_agent2 -t web.page.get["172.16.1.5","/status","80"]
web.page.get[172.16.1.5,/status,80] [s|
HTTP/1.1 200 OK
Connection: close
Content-Length: 116
Content-Type: text/plain
Date: Sat, 26 Jul 2025 12:36:47 GMT
Server: Tengine/3.1.0Active connections: 1
server accepts handled requests request_time178 178 66 0
Reading: 0 Writing: 1 Waiting: 0
]
5.4.1 [Get stub status page](javascript:void(0)): [Version](javascript:void(0))
Server: Tengine/(.*)
5.4.2 [Get stub status page](javascript:void(0)): [Requests total](javascript:void(0))
- tengine接收到客户端请求的连接数
server accepts handled requests request_time\s+([0-9]+) ([0-9]+) ([0-9]+) ([0-9]+)
- 正则表达式:‘\s+’,表示匹配空白字符
- 空格
- 制表符:\t
- 换行符:\n
- 回车符:\r
5.4.3 [Get stub status page](javascript:void(0)): [Requests per second](javascript:void(0))
- 每秒tengine接收到客户端请求的连接数
- 跟上面的正则表达式相同,只是zabbix多了一个处理行为,可以计算每秒更改的数值,即每秒的请求量
5.4.4 [Get stub status page](javascript:void(0)): [Connections dropped per second](javascript:void(0))
- tengine连接失败次数:请求数量-处理数量
5.5 主机增添模板
6. 负载均衡监控
- 监控web节点的可用性
6.1 配置负载均衡参数
[root@lb01.oldboy.cn /etc/nginx/conf.d]# cat lb.oldboy.cn.conf
# 创建分组/池塘
# 分组名字唯一
upstream lb_pools {server 10.0.0.7:80 weight=3;server 10.0.0.8:80 weight=1;
}
server {listen 80;server_name lb.oldboy.cn;access_log /var/log/nginx/lb.oldboy.cn-access.log main;error_log /var/log/nginx/lb.oldboy.cn-error.log notice;root /app/code/lb;location / {proxy_pass http://lb_pools;proxy_set_header Host $http_host;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Real-Ip $remote_addr;}location /lb_status {allow 10.0.0.1;allow 172.16.1.0/24;deny all;check_status;}
}
- 写命令或脚本时,需要过滤页面的值,使用csv格式
- uri:
/lb_status?format=csv
- uri:
6.2 编写监控脚本
[root@lb01.oldboy.cn /server/scripts]# cat check_lb_pools.sh
#!/bin/bash
############################################
##############
# File Name:/server/scripts/check_lb_pools.sh
# Version:V1.0
# Author:oldboy lidao996
# Organization:www.oldboyedu.com
# Desc:检查负载均衡 每组里面的情况
################################################
#############1.vars
url=$1#2.统计负载均衡后端服务器挂掉的数量
total=`curl -s -H Host:${url} localhost/lb_status?format=csv |wc -l`
up=`curl -s -H Host:${url} localhost/lb_status?format=csv |grep -wi up |wc -l`
echo "scale=2; $up / $total * 100" |bc -l
6.3 添加键值
[root@lb01.oldboy.cn ~]# cat /etc/zabbix/zabbix_agent2.d/lb.conf
UserParameter=check.lb[*],sudo bash /server/scripts/check_lb_pools.sh "$1"
- 配置前端监控项……
7. 监控keepalived是否切换
- 在负载均衡的备用节点监控是否有vip即可
7.1 编写脚本
- 在备用节点
[root@lb02.oldboy.cn /server/scripts]# cat chk_vip.sh
#!/bin/bash
##############################################################
# File Name:/server/scripts/chk_vip.sh
# Version:V1.0
# Author:SunKexu
# Organization:www.oldboyedu.com
# Desc:监控keepalived是否切换
##############################################################
#1.vars
vip=$1#2.过滤
vip_cnt=`ip a |grep -w "${vip}" |wc -l`#3.判断
if [ $vip_cnt -gt 0 ];then# keepalived已经切换echo 1
else# keepalived未切换echo 0
fi
7.2 添加键值
[root@lb02.oldboy.cn ~]# cat /etc/zabbix/zabbix_agent2.d/keepalived.conf
UserParameter=keepalived.vip[*],sudo bash /server/scripts/chk_vip.sh "$1"
- 配置前端监控项,定义一个触发器
8. 监控nginx日志状态码
8.1 编写脚本
[root@lb01.oldboy.cn ~]# cat /server/scripts/check_ngx_access_log.sh
#!/bin/bash
##############################################################
# File Name:/server/scripts/check_ngx_access_log.sh
# Version:V1.0
# Author:SunKexu
# Organization:www.oldboyedu.com
# Desc:计算不同状态码数量
##############################################################
#1.vars
access_files="/var/log/nginx/access.log"
code=$1
#2.casecase "$code" in200) awk '{print $9}' $access_files |grep -w "200"|wc -l ;;206) awk '{print $9}' $access_files |grep -w "206"|wc -l ;;301) awk '{print $9}' $access_files |grep -w "301"|wc -l ;;302) awk '{print $9}' $access_files |grep -w "302"|wc -l ;;304) awk '{print $9}' $access_files |grep -w "302"|wc -l ;;400) awk '{print $9}' $access_files |grep -w "400"|wc -l ;;401) awk '{print $9}' $access_files |grep -w "401"|wc -l ;;403) awk '{print $9}' $access_files |grep -w "403"|wc -l ;;404) awk '{print $9}' $access_files |grep -w "404"|wc -l ;;405) awk '{print $9}' $access_files |grep -w "405"|wc -l ;;413) awk '{print $9}' $access_files |grep -w "413"|wc -l ;;500) awk '{print $9}' $access_files |grep -w "500"|wc -l ;;502) awk '{print $9}' $access_files |grep -w "502"|wc -l ;;503) awk '{print $9}' $access_files |grep -w "503"|wc -l ;;504) awk '{print $9}' $access_files |grep -w "504"|wc -l ;;
esac
8.2 添加键值
[root@lb01.oldboy.cn ~]# cat /etc/zabbix/zabbix_agent2.d/ngx.conf
UserParameter=nginx.log.status[*],sudo bash /server/scripts/check_ngx_access_log.sh "$1"
- 配置前端监控项,脚本中有多少个http状态码就要定义多少个监控项
9. web场景监控
- zabbix的web场景监控相当于执行curl或wget
- 用于监控web节点的页面或url请求是否正常
9.1 前端配置web监测
9.2 添加触发器
10. php服务监控
10.1 添加nginx监控配置参数
[root@web01.oldboy.cn /etc/nginx/conf.d]# cat default.conf
server {listen 80 default_server;server_name localhost;default_type text/plain;location / {#return 200 "website is ok";index index.html;}location /php_status {fastcgi_pass 127.0.0.1:9000;fastcgi_index index.php;fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;include fastcgi_params;}location /php_ping {fastcgi_pass 127.0.0.1:9000;fastcgi_index index.php;fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;include fastcgi_params;}
}
10.2 修改php配置文件
- 路径要与nginx监控的url路径相同
[root@web01.oldboy.cn ~]# grep -En '^pm.stat|^ping' /etc/php-fpm.d/www.conf
240:pm.status_path = /php_status
252:ping.path = /php_ping
257:ping.response = pong
10.3 cul测试
[root@web01.oldboy.cn ~]# curl 10.0.0.7/php_status
pool: www
process manager: dynamic
start time: 26/Jul/2025:22:57:24 +0800
start since: 52
accepted conn: 13
listen queue: 0
max listen queue: 0
listen queue len: 128
idle processes: 5
active processes: 1
total processes: 6
max active processes: 1
max children reached: 0
slow requests: 0
[root@web01.oldboy.cn ~]# curl 10.0.0.7/php_ping
pong
[root@web01.oldboy.cn ~]#
10.4 修改php模板
- zabbix自带php模板,修改一下即可
11. 数据库监控
- zabbix自带mysql数据库监控模板
- mysql需创建一个具有可读权限的用户:
grant all on *.* to 'zabbix@localhost' identified by '1';
12. 思维导图
https://kdocs.cn/join/gpuxq6r?f=101\r\n邀请你加入共享群「老男孩教育Linux运维99期-孙克旭」一起进行文档协作