因工作需要搜了一些监控解决方案,发现zabbix还是挺多人推荐的,于是乎记录一下学习过程。本篇主要是搭建好zabbix环境,然后使用agent采集主机数据、使用SNMP v3接入c2960采集数据。
0.环境
- ubuntu 18.04
- docker-ce 19.03.1
- docker-compose 1.24.1
- zabbix server 4.2.5
- zabbix agent 1:4.2.5-1+bionic
1.安装zabbix
1.1.docker-compose编排容器
创建docker-compose.yaml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98version: '3.5'
x-logging: # 日志配置的模板
&logging-setting-template
logging:
driver: 'json-file' # 将容器内的stdout、stderr输出记录为json格式文件
options:
max-size: '30m' # 单个日志文件大小
max-file: '1' # 最大日志文件数量
tag: '{{.Name}}' # 日志记录加上容器名称信息,如使用ELK收集分析日志能方便识别日志类源
networks: # 定义网络,供services使用
monitor-app: # 名称随意
driver: 'bridge'
volumes: # 定义数据卷,供services使用
mysql-data: # 名称随意
services: # 定义服务
mysql: # mysql数据库
container_name: 'mysql' # >>指定容器名称,否则默认"{{yaml所在文件夹名}}_{{服务名称}}_1",PS:在根目录文件夹名为"default"
image: 'mysql'
volumes:
- '/data/mysql:/var/lib/mysql' # 使用数据卷保存容器数据,PS:此处用mysql-data数据卷zabbix会初始化会失败,原因不明
command: '--default-authentication-plugin=mysql_native_password'
restart: 'always'
environment:
MYSQL_ROOT_PASSWORD: 'password' # root用户密码
networks:
- 'monitor-app'
<<: *logging-setting-template
adminer: # mysql的web管理客户端
container_name: 'adminer'
image: 'adminer'
volumes:
- '/etc/localtime:/etc/localtime:ro' # 同步容器时间
restart: 'always'
networks:
- 'monitor-app'
ports:
- '8080:8080'
<<: *logging-setting-template
zabbix-server: # zabbix的后端
container_name: 'zabbix-server'
image: 'zabbix/zabbix-server-mysql'
restart: 'always'
volumes:
- '/data/zabbix/externalscripts:/usr/lib/zabbix/externalscripts:ro' # 监控脚本目录
- '/data/zabbix/alertscripts:/usr/lib/zabbix/alertscripts:ro' # 告警脚本目录
depends_on:
- 'mysql' # 在mysql服务后启动,填服务名
environment:
DB_SERVER_HOST: 'mysql' # >>与mysql服务的容器名对应
MYSQL_USER: 'zabbix' # >>数据库用户名称,与创建的对应
MYSQL_PASSWORD: 'zabbix' # >>数据库用户密码,与创建的对应
MYSQL_DATABASE: 'zabbix' # >>数据库名称,与用户的权限对应
# ZBX_CACHESIZE: '512M' # 一些缓存参数,具体含义自行了解
# ZBX_HISTORYCACHESIZE: '1024M'
# ZBX_HISTORYINDEXCACHESIZE: '256M'
# ZBX_TRENDCACHESIZE: '256M'
# ZBX_VALUECACHESIZE: '512M'
# ZBX_STARTVMWARECOLLECTORS: 2
# ZBX_VMWAREFREQUENCY: 60 # 带VMWARE是采集ESXI或vCenter的相关参数,具体含义自行了解
# ZBX_VMWAREPERFFREQUENCY: 60
# ZBX_VMWARECACHESIZE: '80M'
# ZBX_VMWARETIMEOUT: 10
PYTHONUNBUFFERED: 0
networks:
- 'monitor-app'
# ports:
# - '10051:10051'
<<: *logging-setting-template
zabbix-web: # zabbix的前端
container_name: 'zabbix-web'
image: 'zabbix/zabbix-web-nginx-mysql'
volumes:
- '/data/zabbix/fonts:/usr/share/zabbix/assets/fonts:ro' # 复制字体文件到/data/zabbix/fonts/DejaVuSans.ttf,解决中文乱码问题
restart: 'always'
depends_on:
- 'mysql'
- 'zabbix-server'
environment:
DB_SERVER_HOST: 'mysql' # >>与mysql服务的容器名对应
MYSQL_USER: 'zabbix' # >>数据库用户名称,与创建的对应
MYSQL_PASSWORD: 'zabbix' # >>数据库用户密码,与创建的对应
MYSQL_DATABASE: 'zabbix' # >>数据库名称,与用户的权限对应
ZBX_SERVER_HOST: 'zabbix-server' # >>与zabbix-server服务的容器名对应
PHP_TZ: 'Asia/Shanghai'
networks:
- 'monitor-app'
ports:
- '80:80'
- '433:433'
<<: *logging-setting-templateTips
使用zabbix需要两个镜像,zabbix-server负责采集数据,zabbix-web负责管理、配置。
使用建议
新建一个特定的目录放置yaml文件,以项目名命名目录。
启动容器
1
2
3# 假设文件位于/home/docker/monitor/docker-compose.yaml
cd /home/docker/monitor/
docker-compose up -d首次启动
首次初始化zabbix是启动不起来的,因为还没有数据库的相关权限。
### 1.2.mysql配置 ###Tips
如配置文件名不为docker-compose.yaml,可以使用-f参数指定。
http://宿主机ip:8080,登录adminer
创建用户
1
2
3create user 'zabbix'@'%' identified by 'zabbix';
grant all privileges on zabbix.* to 'zabbix'@'%';
flush privileges;说明
此步骤可以跳过创建zabbix数据库,只授权即可,后续zabbix-server初始化会自行创建数据库以及建表。
更改root密码(根据需要)
1
2alter user 'root'@'localhost' identified by 'newpassword';
alter user 'root'@'%' identified by 'newpassword';1.3.zabbix配置
重启zabbix服务
1
2docker-compose restart zabbix-server
docker-compose restart zabbix-web访问http://宿主机ip,登录。默认用户密码为
Admin
:zabbix
更改中文、修改密码
2.zabbix采集数据
zabbix支持四大类接口采集数据:agent代理程序的接口、SNMP接口、JMX接口、IPMI接口,目前暂时只接触过前两种接入方式,接下来以实例简单介绍。
2.1.通过agent监控Linux/Win主机
安装agent,详见官方教程
1
2
3
4
5
6
7# 添加源
wget https://repo.zabbix.com/zabbix/4.2/ubuntu/pool/main/z/zabbix-release/zabbix-release_4.2-2+bionic_all.deb
dpkg -i zabbix-release_4.2-2+bionic_all.deb
apt update
# 安装
apt install zabbix-agent配置agent,agent有两种工作模式:主动模式和被动模式,主动模式是agent主动联系server上报数据,被动模式则agent启用监听等待server通信再提供数据。
1
2
3
4
5
6
7
8
9
10
11
12
13# 配置文件:/etc/zabbix/zabbix_agentd.conf
# ---被动模式设置---
Server={{zabbix server IP}} # 被动模式的zabbix server ip
# Hostname=zabbix server # 注释掉则默认系统主机名
# ---被动模式设置---
# ---主动模式设置---
# Server=127.0.0.1 # 注释则禁用被动模式
StartAgents=0 # 禁用被动模式需要将监听进程设为0否则启动报错
ServerActive={{zabbix server IP}} # 主动模式的zabbix server ip
# Hostname=zabbix server # 注释掉则默认系统主机名
# RefreshActiveChecks=120 # 默认的上报间隔是120s,可自行设置
# ---主动模式设置---Tips
可以同时启动被动模式以及主动模式,一般使用被动模式,zabbix自带模板也是被动模式。
启动agent
1
2
3
4# 启动
service zabbix-agent start
# 确认正常工作,PS:被动模式下会看到监听10050端口
netstat -tulpn | grep zabbix_agent在zabbix server上创建监控主机
Tips
这里接口配置使用了DNS名称,是因为测试环境下agent和server容器是在同一个docker网络,可通过容器名通信。
过一会能看到数据了
2.2.通过SNMP监控交换机
交换机启用SNMPv3
1
2
3
4
5
6
7
8
9
10
11
12
13
14C2960> enable
C2960# configure terminal
C2960(config)#ip access-list standard ACL_demo
C2960(config-std-nacl)#permit host 128.8.39.121
C2960(config-std-nacl)#deny any log
C2960(config-std-nacl)#exit
C2960(config)#
c2960(config)#snmp-server view VIEW_demo mib-2 included
c2960(config)#snmp-server view VIEW_demo cisco included
c2960(config)#snmp-server view VIEW_demo snmpEngine included
c2960(config)#snmp-server group GROUP_demo v3 priv read VIEW_demo
c2960(config)#snmp-server user USER_demo GROUP_demo v3 auth sha PWD_auth priv aes 128 PWD_priv access ACL_demo
(config)#exit
C2960#copy running-config startup-config准备模板,自带的模板只有SNMPv2的,不过官方的模板库有大神做了比较好用的模板
导入模板
解压得到Template SNMPv3 AES - EN.xml,在web页面进行上传即可。导入脚本文件(模板中使用该脚本获取监控项数据)
解压getSnmpPrivAes_EN.sh,改名为getSnmpPrivAes.sh放置到宿主机的/data/zabbix/externalscripts/
目录,执行chmod 755 getSnmpPrivAes.sh
添加执行权限。脚本目录
docker-compose.yaml中对zabbix-server插件目录进行了映射,脚本文件放到宿主机即可使用。
在zabbix server上创建监控主机
过一会能看到数据了
监控指标
可以根据交换机的SNMP定义创建其它监控指标。
3.快速入门理解
- 自动发现
zabbix里面有两种自动发现:一种是在“配置->自动发现”设置,是用于生成主机清单的;一种是在“配置->主机->主机列表中点击一台主机进详情->自动发现规则”设置,用于生成该主机的监控项。 - 监控项
主机的特定监控指标,可以是文字比如交换机端口1的名称,也可以是数字比如CPU占用率。 - 应用集
定义监控项的类别。 - 触发器
为监控项设置一定规则,当符合条件比如内存使用率达到90,则生成告警。 - 图形
将监控项可视化展示。
4.小结
- zabbix的界面不太友好,感觉信息量特别大,熟悉花了不少时间,上手还是要耐心。
- 自动发现规则很好用,不过涉及宏功能,还需要慢慢学习。
- 模板是一个核心功能,可以克隆系统自带模板根据实际情况调整,只需在主机重新关联新模板,就会整体更新监控项。