监控知识学习
一篇好的博客https://www.cnblogs.com/xuliangwei/p/6709438.html#3925227
文章目录
- 监控知识学习
- 一、监控知识基本概述
- 二、单机时代如何监控
- 1. 监控基本命令
- 2. 随着时间的推移,用户不断地增多,服务随时可能扛不住会被==oom(out of memory)==,当系统内存不足的时候,会触发==oom==
- 3. 监控脚本需求:
- 4. Zabbix监控快速安装
- 5.Zabbix快速监控主机
- 6. Zabbix自定义监控初试
- 1. 监控系统中的对象(iostat对系统的磁盘IO活动做出监视)
- 2. 在ZabbixAgent的`/etc/zabbix/zabbix_agentd.d`目录中新增监控项,使用UserParameter=,
- 3. 在ZabbixAgent客户端测试设置的监控项是否正常,使用`zabbix_agentd -p | grep KEY`检测是否能获取到对应的值
- 4. 在==Zabbbixserver==端测试获取==ZabbixAgent==端自定义的监控项是否正常`zabbix_get -s IP_addr -k KEY
- 5.在`ZabbixWeb`前端页面进行关联展示
- 6. 自定义阈值(到达预设的瓶颈)
- 7. 验证Zabbix报警
- 8. 邮件报警
- 三、自定义邮件报警
- 四、Zabbix监控nginx
一、监控知识基本概述
1. 为什么要使用监控(实时、反馈、可靠、稳定)
- 对系统不间断实时监控
- 实时反馈系统当前状态
- 保证服务可靠性安全性
- 保证业务持续稳定运行
2. 如何进行监控,比如我们需要监控磁盘的使用率(free -h)
- 如何查看磁盘使用率 df -h
- 监控磁盘的哪些指标 block、incode
- 如何获取具体的信息df -h | awk ‘//$/{print $(NF -1)}’ ($5)
- 获取的数值到达多少报警?(一般来说80%)
我们想要监控什么(cpu的使用率、负载、用户态、内核态、上下文切换)—用什么命令查找到这些信息—信息中那些是我们所需要的—如何把这些需要的信息取出来–根据企业的实际情况,定义阈值
了解监控对象:我们监控的对象你是否了解呢?比如CPU是如何工作的?
性能基准指标:我们要监控这个东西的什么属性?比如CPU的使用率、负载、用户态、内核态、上下文切换
报警阈值定义:怎么样才算是故障,要报警呢?比如CPU的负载到底多少算高,用户态、内核态分别跑多少算高?
故障处理流程:收到了故障报警,那么我们怎么处理呢?有什么更高效的处理流程呢?
发现问题:当系统发生故障报警,我们会受到故障报警的信息
定位问题:故障邮件一般会写某某主机故障、具体故障的内容,就需要我们对报警内容需要分析,比如一台服务器连不上:我们就需要去考虑是网络问题、还是负载太高导致长时间无法连接、又或者是某开发出发了防火墙禁止的相关策略等等,我们就需要去分析故障具体原因
解决问题:当我们了解到了故障的原因后,就需要通过故障解决的优先级去解决该故障
总结问题:当我们解决完重大故障后,需要对故障原因以及防范进行总结归纳,避免以后重复出现
####3 流行的监控工具
-
cactI(仙人掌)、Nagios、Zabbix、
cacti:网络流量监控
Nagios: 主机监控
-
Zabbix是一个分布式监控系统,支持多种采集方式和采集客户端,有专用的Agent代理,也支持SNMP、IPMI、JMX、Telnet、SSH等多种协议,它将采集到的数据存放到数据库,然后对其进行分析整理,达到条件触发告警。其灵活的扩展性和丰富的功能是其他监控系统所不能比的。相对而言,它的总体功能做的非常优秀(丰富的功能、可扩展的能力、二次开发的能力和简单易用的特点)
-
Lepus(天兔)专门用来数据库监控系统
-
Open—Falcon 小米
-
Prometheus(普罗米修斯,Docker、K8s)
-
三方监控软件(监控宝、安全宝、安全狗、)
4. 如果去到一家新公司,如何入手监控?
- 硬件监控: 路由器、交换机、防火墙
- 系统监控: CPU、内存、磁盘、网络、进程、TCP
- 服务监控: Nginx、php、tomcat、redis、memcache、mysql
- WEB监控: 请求时间、响应时间、加载时间
- 日志监控: ELK(收集、存储、分析、展示) 日志易
- 安全监控: Firewalld、WAF(Nginx+lua)、安全宝、牛盾云、安全狗
- 网络监控 smokeping 多机房
- 业务监控 活动引入多少流量、产生多少注册量、带来多少价值
####5. 监控流程
- 数据采集: Zabbix通过SNMP、Agent、ICMP、SSH、IPMI等对系统进行数据采集
- 数据存储: Zabbix存储在Mysql上,也可以存储在其他的数据库服务中
- 数据分析:当我们事后需要复盘分析故障时。Zabbix能给我们提供图形以及时间等相关信息,方便我们确定故障所在。
- 数据展示: web页面展示(移动APP、Java_php开发一个web页面也可以)
- 监控报警: 电话报警、邮件报警、微信报警、短信报警、报警升级机制等(无论什么报警都可以)
- 报警处理: 当接收到报警时,我们需要根据故障的级别进行处理,比如:重要紧急、重要不紧急等。根据故障的级别,配合相关的人员进行快速处理。
二、单机时代如何监控
1. 监控基本命令
CPU监控命令: w、top、htop、glances、
内存监控命令: free -m
磁盘监控命令: df、iotop
网络监控命令: ifconfig、route、glances、iftop、nethogs、netstat(查看网络状态)
查看tcp11中的状态
netstat -an | grep ESTABLISHED
查看路由信息
netstat -rn
netstat -lntup
2. 随着时间的推移,用户不断地增多,服务随时可能扛不住会被oom(out of memory),当系统内存不足的时候,会触发oom
- 当系统内存不足的时候会大量使用swap
- 当系统大量使用swap的时候,系统会特别卡
注意:有时可能内存还有剩余300Mb~500Mb,但会发现swap依然被使用
dd if=/dev/zero of=/dev/null bs=800M
tail -f /var/log/messages
dd命令: 用于读取、转换并输出数据(指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转换)
参数说明
- if=文件名: 输入文件名,默认为标准输入。即指定源文件
- of=文件名: 输出文件名,默认为标准输出。即指定目的文件
- obs=bytes 一次写入bytes字节,即写入缓冲区的字节数
- bs = bytes 同时设置读/写缓冲区的字节数(等于设置ibs和obs)
- count=blocks 只拷贝输入的blocks块
eg1: 1、要把一张软盘的内容拷贝到另外一张软盘上,利用/tmp作为临时存储区。把源盘插入驱动器中,输入下述命令 dd if=/dev/fd0 of=/tmp/tmpfile 2、拷贝完成后,把源盘从驱动器中取出,把目标盘插入,输入命令 dd if=/tmp/tmpfile of=/dev/fd0 3、软盘拷贝完成后,应该将临时文件删除 rm /tmp/tmpfile eg2: 把net.i这个文件写入软盘中,并设定读/写缓冲区的数目 dd if=net.i of=/dev/fd0 be=16384 eg3: 将文件sfile拷贝到文件dfile中 dd if=sfile of=dfile eg4: 创建一个100M的空文件 dd if=/dev/zero of=hello.txt bs=100M count=1 补充知识 /dev/null,外号叫无底洞,你可以向他输出任何数据,他通吃,并且不会撑着 /dev/zero,是一个输入设备,你可以用它来初始化文件 创建特定文件大小最简单的方法是使用dd命令 dd if="inputFileName" of="outFileName" bs="块大小" count="块个数" 也可以用dd命令来传输大量数据来测试内存的操作速度 dd if=/dev/zero of=./testmm.file bs=10M count=10
3. 监控脚本需求:
- 怎么获取内存可用的值
- 获取到内存可用的值如何和设定的阈值进行比较
- 比较如果大于100m则不处理,如果小于100则进行报警
- 如何每分钟执行一次
#!/bin/bash
#1、定义变量
Avail_buffer=$(free -m | awk '/^Mem/{print $NF}')
IP=$(hostname -I | awk '{print $1}')
Host=$(hostname)
Date=$(date +%F-%R)
#2、循环语句实现实时监控
while true
do
Avail_buffer=$(free -m | awk '/^Mem/{print $NF}')
if [ $Avail_buffer -lt 1000 ];then
echo "报警。${Date}_${Host}_$IP,内存不足,可用内存为$Avail_buffer.请及时处理"
else
echo "正常,进入下一次循环"
fi
sleep 2
done
当我们向里面写入大量的数据
dd if=/dev/zero of=/tmp/file bs=1G count=222模拟向里面写入数据
4. Zabbix监控快速安装
官方安装网址
https://www.zabbix.com/cn/download?zabbix=4.0&os_distribution=centos&os_version=7&db=mysql&ws=apache
阿里巴巴镜像站
[阿里巴巴开源镜像站-OPSX镜像站-阿里云开发者社区 (aliyun.com)](https://developer.aliyun.com/mirror/)
1. 配置Zabbix仓库
rpm -ivh https://mirrors.aliyun.com/zabbix/zabbix/3.4/rhel/7/x86_64/zabbix-release-3.4-2.el7.noarch.rpm
2. 安装Zabbix server,Web前端,agent、mysql(mariabd)
yum install zabbix-server-mysql zabbix-web-mysql zabbix-agent mariadb-server -y
zabbix-server-mysql #zabbix服务器包
zabbix-web-mysql #zabbix前端包
zabbix-agent #zabbix代理包
mariadb-server #mysql
3. 创建初始数据库
systemctl start mariadb
systemctl enable mariabd #先把服务提起来
创建数据库并授权
# mysql -uroot -p
mysql> create database zabbix character set utf8 collate utf8_bin;
mysql> create user zabbix@localhost identified by 'zabbix';
mysql> grant all privileges on zabbix.* to zabbix@localhost ;
mysql> quit;
导入初始架构和数据,系统将提示您输入新创建的密码。
# zcat /usr/share/doc/zabbix-server-mysql*/create.sql.gz | mysql -uzabbix -pzabbix zabbix(库名)
4. 为Zabbix server配置数据库
编辑配置文件 /etc/zabbix/zabbix_server.conf
DBPassword=zabbix
5. 为Zabbix前端配置PHP
编辑配置文件 /etc/httpd/conf.d/zabbix.conf, uncomment and set the right timezone for you.
# php_value date.timezone Asia/Shanghai
6. 启动Zabbix server和apachet
启动Zabbix server和apache,并为它们设置开机自启:
# systemctl restart zabbix-server httpd
# systemctl enable zabbix-server httpd
7. 可以进行访问了
http://192.168.121.155/zabbix
额外补充
Nginx和php
Nginx自身不能解析php,需要通过php的fpm插件 9000端口来处理
启动或重启时,必须要分开进行
Apache和php
Apache自带php模块,只要安装且启动服务,就能自动解析php
启动和重启时,只需对httpd操作就行
防火墙未放行,导致Zabbix页面加载不出来
203 firewall-cmd --add-port=80/tcp --permanent
204 firewall-cmd --query-port=80/tcp
205 firewall-cmd --reload
206 firewall-cmd --query-port=80/tcp
5.Zabbix快速监控主机
代理节点的配置
1. 安装Zabbix-Agent
rpm -ivh https://mirrors.aliyun.com/zabbix/zabbix/4.0/rhel/7/x86_64/zabbix-agent-4.0.36-1.el7.x86_64.rpm
2. 配置Zabbix-Agent指向Zabbix-Server
[root@zabbix-agent ~]# vim /etc/zabbix/zabbix_agentd.conf
Server=172.0.0.1改为192.168.121.163(server)
3. 启动Zabbix-Agent,默认监听在10050端口
[root@localhost ~]# systemctl start zabbix-agent.service [root@localhost ~]# systemctl enable zabbix-agent.service
netstat -lntp 查看端口号
4. 配置Zabbix-web访问zabbix-server,添加zabbix-agent
6. Zabbix自定义监控初试
如何获取想要监控对象的值,又如何将数据传递给zabbix
1. 监控系统中的对象(iostat对系统的磁盘IO活动做出监视)
[root@zabbix-agent ~]# iostat | awk '/^sda/ {print $2}'
2. 在ZabbixAgent的/etc/zabbix/zabbix_agentd.d
目录中新增监控项,使用UserParameter=,
[root@zabbix-agent ~]# vim /etc/zabbix/zabbix_agentd.d/iotop.conf
[root@zabbix-agent ~]# cat /etc/zabbix/zabbix_agentd.d/iotop.conf
UserParameter=iotps,iostat | awk '/^sda/ {print $2}'
[root@zabbix-agent ~]# systemctl restart zabbix-agent.service
3. 在ZabbixAgent客户端测试设置的监控项是否正常,使用zabbix_agentd -p | grep KEY
检测是否能获取到对应的值
[root@zabbix-agent ~]# systemctl restart zabbix-agent.service
[root@zabbix-agent ~]# zabbix_agentd -p | grep iotps
iotps [t|1.41]
4. 在Zabbbixserver端测试获取ZabbixAgent端自定义的监控项是否正常`zabbix_get -s IP_addr -k KEY
[root@localhost ~]# yum -y install zabbix-get
[root@localhost ~]# zabbix_get -s 192.168.121.166 -p10050 -k iotps
1.37
5.在ZabbixWeb
前端页面进行关联展示
- 点击配置–>主机–>对应主机–>监控项–>创建监控项–>名称–>键值(监控项目名称)–>信息类型–>单位
- 点击检测中–>最新数据–>等待数据
6. 自定义阈值(到达预设的瓶颈)
- 选择配置–>主机–>对应主机>–>触发器–>创建触发器–>名称–>表达式一定要选择对应的监控项进行设定({web03-10.0.09:system.users.num.last()})–>确认
7. 验证Zabbix报警
- 开启多个会话端口,测试前端报警
- 前端Zabbix面板报警开启方式–>右上角小人头–>正在发送消息–>开启即可
8. 邮件报警
收件人的邮箱设置,–小人图标–报警媒介
模拟报警情况
实施思路
- 配置–动作– Report problems to Zabbix administrators(已启用)
- 管理–报警媒介类型–Email–填写发送人邮件地址等信息
- 右上角小人—报警媒介—添加发送人的邮件信息–更新
排错思路
- 先看报表中的动作日志,有没有记录,如果没有。按照实施思路重新检查。
systemctl restart zabbix-server
自定义模板、监控项、触发器
- 默认的监控项和触发器不合理
- 多调试才能找到最适合当前环境的监控阈值
- 但不知道键值KV是干嘛的时,复制粘贴到server端
[root@localhost ~]# zabbix_get -s 192.168.121.166 -p10050 -k 键值
zabbix_server -R config_cache_reload
来清除缓存,而不用重启服务
三、自定义邮件报警
Zabbix报警媒介类型中默认有Email
但是 Zabbix2.*的版本中没有这个功能
Centos6的php版本过低,就算装了Zabbix3.4的版本,也不支持
脚本监控报警
脚本发邮件实施步骤
1. 在Zabbix-server端安装mailx
[root@localhost ~]# yum -y install mailx
修改配置文件。配置邮件信息
[root@localhost ~]# vim /etc/mail.rc
添加
set bsdcompat
set from=1305456282@qq.com
set smtp=smtps://smtp.qq.com:465
set smtp-auth-user=1305456282@qq.com
set smtp-auth-password=
set smtp-auth=login
set ssl-verify=ignore
set nss-config-dir=/etc/pki/nssdb/
[root@localhost ~]# echo tangkaikainihaoa | mail -s kaikaitang 1305456282@qq.com
(发送邮件)
-s 写标题 echo或者cat 写内容
2. 写脚本
[5 自定义警报提示 (zabbix.com)](https://www.zabbix.com/documentation/4.0/zh/manual/config/notifications/media/script)
[root@localhost alertscripts]# cd /usr/lib/zabbix/alertscripts/
[root@localhost alertscripts]# pwd
/usr/lib/zabbix/alertscripts
[root@localhost alertscripts]# vim alart.sh
[root@localhost alertscripts]# cat alart.sh
#!/bin/bash
to=$1
subject=$2
body=$3
cat <<EOF | mail -s "$subject" "$to"
$body
EOF
[root@localhost alertscripts]# bash alart.sh 1305456282@qq.com test 123
然后就依次正常收到邮件
3. 在Zabbix-web上创建自定义报警
管理–报警媒介–创建媒体类型
收到的邮件发现是乱码
4. 实现企业微信报警
5. 编写邮件内容
配置故障报警邮件内容
单击配置—东作----事件源----触发器----启用默认的告警通知
1. 配置故障报警邮件内容
邮件名称:
故障告警:{TRIGGER.NAME}
告警消息内容:
问题开始于:{EVENT.DATE} on {EVENT.TIME}
设备主机名:{HOST.NAME1}
报警严重性:{TRIGGER.SEVERITY}
报警服务:{ITEM.NAME1}
报警key: {ITEM.KEY1}:{ITEM.VALUE1}
原始问题ID: {EVENT.ID}
2. 配置恢复告警邮件内容
邮件名称:
告警恢复:{TRIGGER.NAME}
恢复消息内容:
故障恢复于:{EVENT.DATE} on {EVENT.TIME}
恢复主机:{HOST.NAME1}
恢复服务:{ITEM.NAME1}
恢复key1: {ITEM.KEY1} : {ITEM.VALUE1}
恢复key2: {ITEM.KEY2} : {ITEM.VALUE2}
报警内容详细了很多
6. zabbix图表中中文不显示
- 从windows中找到字体
C:\Windows\Fonts
- 找到Linux里,zabbix的字体路径,将第一步的字体替换
find / -name "*fonts*"
cd /usr/share/zabbix/assets/fonts/
ls
file graphfont.ttf
cd /etc/alternatives/
ls
file zabbix-web-font
cd /usr/share/fonts/dejavu/
ls
file DejaVuSans.ttf
上传字体licon.ttf
mv DejaVuSans.ttf DejaVuSans.ttf.bak
mv lucon.ttf DejaVuSans.ttf
修改之后的字体
7. Zabbix自定义配置阈值
目标:演示去除内存的百分比(取出内存的可用的MB大小 / 总的内存大小 = 实际可用的百分比)
1. 定义剩余内存百分比
[root@zabbix-agent zabbix_agentd.d]# cd /etc/zabbix/zabbix_agentd.d/
[root@zabbix-agent zabbix_agentd.d]# vim available_mem.conf
UserParameter=available_mem_percent,free | awk '/^Mem/{print $NF*100/$2}'
2. server端测试是否成功
[root@localhost ~]# zabbix_get -s 192.168.121.166 -k available_mem_percent
80.1087
3. 创建监控项
4. 定义触发器
5. 模拟触发条件
关闭交换分区.swapoff -a
用dd if=/dev/zero of=/tmp/test bs=100M count=100 模拟情况时就会发生agent系统宕掉的情况。不好验证
6. 触发现象省略
四、Zabbix监控nginx
具体情况访问这篇推文
[(20条消息) Centos7下通过zabbix监控nginx status_bobpen的专栏-CSDN博客](https://blog.csdn.net/bobpen/article/details/53431699)