1.概述与监控选型
| 具体内容 | 重要度 |
| 核心: 根据用户访问流程监控 (系统,服务,业务指标进行监控) | 主线 |
| 硬件,如物理服务器,(服务,网络) | 辅助 |
| 日志监控(收集与展示),日志平台 |
| 安全监控(入侵检测,漏洞扫描(等保测评)) |
| 运维服务监控(ans工具(依赖ssh服务),堡垒机,harbor仓库等) |
| 核心服务 | 说明 | 优点 | 缺点 |
| zabbix | 监控系统底层环境,模板,上手简单(php,页面) | 使用简单,各种模板齐全,有完善的自定义监控 | 部署复杂 |
| Prometheus | 通过各种客户端(exporter监控),性能高(golang),适用于docker,k8s容器监控 | 性能好,golang开发(二进制命令+配置文件)。 擅长监控容器,部署简单 | 依赖各种exporter(客户端),不全,自定义监控较为复杂,使用复杂 |
| grafana | 优雅显示,监控大屏(获取zabbix或Prometheus数据) | 前2者获取数据,grafana来显示。监控三剑客 | |
| open falcon | 小米 | | |
| n9e(夜莺Nightingale) | 滴滴(基于小米二次开发) | | |
| Nagios/Cacti | 比较老了 | | 部署复杂,页面不好 |
| 云监控(CMS) | 云产品才有 | | |
| skywalking监控 | 链路监控(apm监控),根据用户请求流程(请求到达某个节点的处理速度),出图,监控 | | |
| …… | | | |
- 按照用户访问流程监控
- 监控系统底层环境
- 监控运维环境
2.zabbix
2.1zabbix CS架构
- zabbix是用php,c语言开发的—
客户端:zabbix-agent;后来才加入golang–客户端:zabbix-agent2,用来采集收集数据
- zabbix-server: zbx服务端(c语言写的),把数据收集并存放到数据库中
- 看数据–>zbx前端展示页面(php写的)(连接数据库,连接服务端,展示数据)
- 服务端,数据库,展示页面这三个组件现在在1台机器,未来访问量大,拆分
2.2zabbix环境准备
| 角色 | 主机名 | ens33/ens34 | 配置 |
| zabbix服务端 | m03-zbx-server | 10.0.0.63/172.16.1.63 | 2C4G |
| zabbix客户端 | web01 | 10.0.0.7/172.16.1.7 | 1C1G |
| zabbix客户端 | web03 | 10.0.0.9/172.16.1.9 | 1C1G |
| zabbix客户端 | ….. | | |
| 其他综合架构部分的主机都是客户端 | | | |
环境准备:
- 客户端:不能用容器,监控的就是宿主机数据。
- 服务端准备docker环境:
- docker安装流程
- 部署docker-compose并创建目录/app/tools/zbx/存放
docket-compose.yml
- 传输镜像并导入
ls *.tar |xargs -n1 docker load -i -n1 一次一个
- 直接导入镜像,daemon.json可不配置
- zabbix的web界面用户名Admin 密码zabbix
2.3 m03安装与配置客户端
#1.yum安装客户端rpm包
yum install -y https://mirrors.aliyun.com/zabbix/zabbix/7.0/rhel/7/x86_64/zabbix-agent2-7.0.19-release1.el7.x86_64.rpm
#https://mirrors.aliyun.com-->搜zabbix-->下载地址-->zabbix-->版本-->选系统(rhel(红帽,麒麟))-->7-->x86_64-->zabbix-agent2-xxx(尽可能选新的)
#2.修改zbx配置文件Server行
[root@m03-zbx-server ~]# egrep -v '^$|#' /etc/zabbix/zabbix_agent2.conf
PidFile=/run/zabbix/zabbix_agent2.pid
LogFile=/var/log/zabbix/zabbix_agent2.log
LogFileSize=0
#如果本机,没用容器,同一台机器部署的服务端,写127.0.0.1即可
#172.200.1是容器指定的网段
#172.16.1.63是zbx服务端ip
Server=172.200.1.0/24,172.16.1.63
ServerActive=127.0.0.1
Hostname=Zabbix server
PluginSocket=/run/zabbix/agent.plugin.sock
ControlSocket=/run/zabbix/agent.sock
Include=/etc/zabbix/zabbix_agent2.d/plugins.d/*.conf
Include=/etc/zabbix/zabbix_agent2.d/*.conf
#3.启动或重启
systemctl enable --now zabbix-agent2.service
systemctl restart zabbix-agent2.service
#4.检查端口(zbx客户端10050)
[root@m03-zbx-server ~]# ss -lntup|grep zabbix
tcp LISTEN 0 128 *:10050 *:* users:(("zabbix_agent2",pid=60457,fd=7))
#未启动可查看日志
[root@m03-zbx-server ~]# tail /var/log/messages
[root@m03-zbx-server ~]# tail /var/log/zabbix/zabbix_agent2.log
在zbx服务端页面点点点即可
2.4监控主机流程
- 客户端:ansible给所有节点部署客户端; 修改配置文件
Server=172.16.1.63–服务端ip; 启动
- 服务端:web页面: 创建主机,关联模板,客户端ip,启动主机
[root@m01 /server/ansible]# cat 17.install_zbx_agent2.yml
- hosts: all
tasks:
- name: 1. 安装zbx客户端agent2
shell: "yum install -y https://mirrors.aliyun.com/zabbix/zabbix/7.0/rhel/7/x86_64/zabbix-agent2-7.0.19-release1.el7.x86_64.rpm"
tags:
- install_agent2
- name: 2. 修改配置文件
lineinfile:
path: /etc/zabbix/zabbix_agent2.conf
regexp: "^Server="
line: "Server=172.16.1.63"
tags:
- motify_conf
notify:
- restart_zbx_agent2
- name: 3.启动zbx-agent客户端
systemd:
name: zabbix-agent2
enabled: true
state: started
tags:
- start_zbx_agent2
handlers:
- name: restart_zbx_agent2
systemd:
name: zabbix-agent2
state: restarted
3.zabbix自定义监控
3.1无参数
- 遇到zbx模板中没有的内容,进行监控。使用zbx自定义监控功能
- 使用流程: (只要命令/脚本获取的内容,就可以自定义监控)
- 客户端通过配置文件创建对应的key(键值,命令)⭐⭐⭐⭐⭐
- 客户端: 修改子配置文件⭐⭐⭐⭐⭐
- 服务端: 检查key是否可用
- 前端配置: 创建监控项,添加key,添加触发器,添加图形….
#1.获取僵尸进程的命令
top -bn1|awk 'NR==2{print $(NF-1)}'
#2.准备客户端子配置文件
[root@web03 ~]# cat /etc/zabbix/zabbix_agent2.d/sys.conf
#格式:UserParameter=key名字,对应的命令/脚本
UserParameter=sys.zombie,top -bn1|awk 'NR==2{print $(NF-1)}'
[root@web03 ~]# egrep -i 'include' /etc/zabbix/zabbix_agent2.conf |egrep -v '#'
Include=/etc/zabbix/zabbix_agent2.d/plugins.d/*.conf
Include=/etc/zabbix/zabbix_agent2.d/*.conf #因为主配置文件中include了
#3.重启zbx客户端
systemctl restart zabbix-agent2.service
#4. 在m03节点进入到zabbix-server(zbx服务端)容器中测试
zabbix_get命令 #用容器默认有此命令。含义: 连接客户端,要指定的数据,检查服务端客户端通不通
zabbix@2e8f256c1ef6:~$ zabbix_get -s 172.16.1.9 -k sys.zombie # -s客户端ip -p 默认10050端口 -k 键值(用来获取客户端数据)
3
1)监控项
2)触发器
- 监控项获取到数值是否反映系统异常
- 触发器触发后一般会进行告警操作(邮件,微信,OA软件)
表达式last(/web03/sys.zombie)>0
#last() 取函数最近1个值
#/web03/sys.zombie
#last(/主机/键值)
3)自定义图形
- 创建的图形可以汇总在一起(仪表盘),自动生成的不行。
4)自定义监控–>模板
- 自定义监控产物: 模板+配套的子配置文件(命令或脚本)
- 监控项
- 触发器
- 图形
- 关联模板中
- 如何把自定义监控应用到所有机器?
- 创建模板,复制监控项,触发器,图形
- 模板与对应主机关联
- ansible把客户端配置文件批量分发(自定义键值)
- 完整的自定义监控流程:
- 选择1台机器,配置测试自定义监控
- 客户端: 命令或脚本获取指定的指标,写入到zabbix agent子配置文件中
- web: 添加监控项,触发器(可选),图形(可选)
- 创建或修改模板
- 模板与主机关联,子配置文件分发
- 测试
system.hostname 主机名
system.uname 内核信息 主机名
net.tcp.port[<ip>,port] 带有参数形式的键值
解释:
[<ip>,port] 需要指定2个参数
<ip> #<>括起来可以省略,选填
port #必须填写 端口号
net.tcp.port[<ip>,port] #检查是否能建立TCP连接到指定端口。返回0--不能连接;返回1--可以连接
#进容器测试
zabbix@2e8f256c1ef6:~$ zabbix_get -s 172.16.1.9 -k net.tcp.port[,80]
1
proc.num[<name>,<user>,<state>,<cmdline>,<zone>] #进程数,返回整数
state 僵尸进程zombie zomb
3.2有参数的键值
- 监控指定端口连接数(已经建立连接)
- 检查公网方向的端口,连接数
- 检查指定的用户是否异地登录(没有从堡垒机登录)
- 分析: 获取指定用户登录的ip
- 实现:
lastlog -u root|awk 'NR==2{print $3}'
#1.客户端脚本(后续改造:系统中是否有用户没有从堡垒机登录)
[root@web03 ~]# cat /server/scripts/check_user_jms_login.sh
#!/bin/bash
##############################################################
# File Name:/server/scripts/check_user_jms_login.sh
# Version:V1.0
# Author:cui
# Organization:www.typedance.com
# Desc:
##############################################################
user="$1"
jms_ip="$2"
login_ip=`lastlog -u root|awk 'NR==2{print $3}'`
if [ "${login_ip}" = "${jms_ip}" ];then
echo 1
else
echo 0
fi
#2.客户端自定义键值 并重启zbx客户端
[root@web03 ~]# cat /etc/zabbix/zabbix_agent2.d/sys.conf
UserParameter=sys.zombie,top -bn1|awk 'NR==2{print $(NF-1)}'
UserParameter=check.log.secure,sudo tail -n 5000 /var/log/secure |grep -i failed|wc -l
UserParameter=check.login[*],bash /server/scripts/check_user_jms_login.sh "$1" "$2"
#[*] 有传参,创建时都这样写 脚本后"$1" "$2" 传参
#3.进入zabbix—server容器测试
zabbix@2e8f256c1ef6:~$ zabbix_get -s 172.16.1.9 -k check.login[root,172.16.1.61] #脚本后"$1" "$2"和这里的root,ip对应
总结
- 监控指标:监控了什么?
- 监控的选型与搭配
- 监控任意主机的流程
- 自定义监控