搭建zabbix监控系统

本文主要记录在上班学(mo)习(yu)时的一些学习记录,本文主要记录的是zabbix监控系统的学习。

关键词:zabbix

zabbix架构

镜像种类

说明 镜像 备注
Zabbix agent zabbix/zabbix-agent
Zabbix server zabbix/zabbix-server-mysql 支持 MySQL 数据库的 Zabbix server
zabbix/zabbix-server-pgsql 支持 PostgreSQL 数据库的 Zabbix server
Zabbix web UI zabbix/zabbix-web-apache-mysql 基于Apache2 Web服务器 的 Zabbix web 界面,支持 MySQL 数据库
zabbix/zabbix-web-apache-pgsql 基于Apache2 Web服务器 的 Zabbix web 界面,支持 PostgreSQL 数据库
zabbix/zabbix-web-nginx-mysql 基于Nginx Web服务器 的 Zabbix web 界面,支持 MySQL 数据库
zabbix/zabbix-web-nginx-pgsql 基于Nginx Web服务器 的 Zabbix web 界面,支持 PostgreSQL 数据库
Zabbix proxy zabbix/zabbix-proxy-sqlite3 Zabbix proxy ,支持 SQLite3 数据库(Zabbix proxy是使得Zabbix支持分布式监控的扩展的组件)
zabbix/zabbix-proxy-mysql Zabbix proxy, 支持 MySQL 数据库
zabbix/zabbix-java-gateway Zabbix Java 网关(Zabbix Java网关是用于与Java应用程序中集成并监控其性能和状态,可以充当Zabbix服务器与Java 应用程序之间的中间代理)

docker-compose.yml文件

根据架构图,zabbix主要有以下组件:

  • zabbix server服务端,负责处理由agent或者proxy发送来的数据,并将这部分数据写入数据库。与这部分相关的docker配置文件如下
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
server:
image: zabbix/zabbix-server-mysql
restart: always
volumes:
#- ./zabbix:/etc/zabbix
- ./alertscripts:/usr/lib/zabbix/alertscripts
- /etc/localtime:/etc/localtime
environment:
- DB_SERVER_HOST=192.168.15.131
- MYSQL_DATABASE=zabbix
- MYSQL_USER=zabbix
- MYSQL_PASSWORD=zabbix
- MYSQL_ROOT_PASSWORD=root
- ZBX_JAVAGATEWAY=192.168.15.131
- ZBX_JAVAGATEWAY_ENABLE=true
- ZBX_JAVAGATEWAYPORT=10052

主要设置以下几个地方:

  1. DB_SERVER_HOST:这部分是设置后端数据库的地址,如果两者在同一台机器上直接使用localhost即可。
  2. MYSQL_DATABASE:数据库名称,默认是zabbix。
  3. MYSQL_USER:zabbix数据库的用户名,默认也是zabbix。
  4. MYSQL_PASSWORD:zabbix数据库的密码,默认也是zabbix。
  5. MYSQL_ROOT_PASSWORD:数据库的root密码
  6. ZBX_JAVAGATEWAY:java gateway的地址,这里以容器的名称代替。
  7. ZBX_JAVAGATEWAY_ENABLE:设置是否启用java gateway。
  8. ZBX_JAVAGATEWAYPORT:java gateway的端口。

配置文件目录对应/etc/zabbix/zabbix_server.conf

  • zabbix 需要连接的mysql数据库
1
2
3
4
5
6
7
8
9
10
11
12
13
mysql:
image: mysql:debian
restart: always
environment:
- MYSQL_DATABASE=zabbix
- MYSQL_USER=zabbix
- MYSQL_PASSWORD=zabbix
- MYSQL_ROOT_PASSWORD=root
command:
- mysqld
- --default-authentication-plugin=mysql_native_password
- --character-set-server=utf8
- --collation-server=utf8_bin

这部分是zabbix连接的mysql数据库,需要注意的是mysql的版本对于某个特定版本可能会有要求,这个可以在日志中查看到对应的报错。

  • zabbix的java gateway:可以通过JAVA程序的JMX特性连接到JAVA应用程序,进而查看JAVA应用程序的性能。这部分没有默认设置。

    该应用程序的默认端口是10052,这个端口和设置的JMX端口不同,一个是客户端(应用程序)的端口(JMX端口),另外一个相当于是代理的gateway端口(默认工作在10052)

1
2
3
4
5
6
zabbix-java-gateway:
image: zabbix/zabbix-java-gateway
restart: always
volumes:
- /etc/localtime:/etc/localtime
network_mode: host
  • zabbix的前端展示界面,一般是php+nginx的环境。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
zabbix-web-nginx-mysql:
image: zabbix/zabbix-web-nginx-mysql
restart: always
environment:
- DB_SERVER_HOST=192.168.15.131
- MYSQL_DATABASE=zabbix
- MYSQL_USER=zabbix
- MYSQL_PASSWORD=zabbix
- MYSQL_ROOT_PASSWORD=root
- ZBX_SERVER_HOST=192.168.15.131
privileged: true
network_mode: host
volumes:
- /etc/localtime:/etc/localtime
- ./Song.ttf:/usr/share/zabbix/assets/fonts/DejaVuSans.ttf

这里注意区分DB_SERVER_HOST和ZBX_SERVER_HOST的区别,一个是连接后端数据库的端口,另一个是连接zabbix服务端的端口。

此外容器的默认字体无法正常显示中文,这里使用宋体进行替换。

  • zabbix的代理客户端:负责监控当前主机的组件, 配合自定义的脚本可以实现自定义监控.
1
2
3
4
5
6
7
8
zabbix-agent:
image: zabbix/zabbix-agent
restart: always
environment:
- ZBX_HOSTNAME=Zabbix server
- ZBX_SERVER_HOST=192.168.15.131
- ZBX_SERVER_PORT=10051
network_mode: host

主要设置Zabbix Server的IP地址和Zabbix的端口地址

总体zabbix配置:

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
version: '3'

services:
zabbix-web-nginx-mysql:
image: zabbix/zabbix-web-nginx-mysql
restart: always
environment:
- DB_SERVER_HOST=192.168.15.131
- MYSQL_DATABASE=zabbix
- MYSQL_USER=zabbix
- MYSQL_PASSWORD=zabbix
- MYSQL_ROOT_PASSWORD=root
- ZBX_SERVER_HOST=192.168.15.131
privileged: true
network_mode: host
volumes:
- /etc/localtime:/etc/localtime
- ./Song.ttf:/usr/share/zabbix/assets/fonts/DejaVuSans.ttf
depends_on:
- zabbix-server-mysql
- zabbix-mysql
zabbix-mysql:
image: mysql:debian
restart: always
environment:
- MYSQL_DATABASE=zabbix
- MYSQL_USER=zabbix
- MYSQL_PASSWORD=zabbix
- MYSQL_ROOT_PASSWORD=root
command:
- mysqld
- --default-authentication-plugin=mysql_native_password
- --character-set-server=utf8
- --collation-server=utf8_bin
volumes:
- /etc/localtime:/etc/localtime
- ./db:/var/lib/mysql
network_mode: host
zabbix-java-gateway:
image: zabbix/zabbix-java-gateway
restart: always
volumes:
- /etc/localtime:/etc/localtime
network_mode: host
zabbix-server-mysql:
image: zabbix/zabbix-server-mysql
restart: always
volumes:
#- ./zabbix:/etc/zabbix
- ./alertscripts:/usr/lib/zabbix/alertscripts
- /etc/localtime:/etc/localtime
environment:
- DB_SERVER_HOST=192.168.15.131
- MYSQL_DATABASE=zabbix
- MYSQL_USER=zabbix
- MYSQL_PASSWORD=zabbix
- MYSQL_ROOT_PASSWORD=root
- ZBX_JAVAGATEWAY=192.168.15.131
- ZBX_JAVAGATEWAY_ENABLE=true
- ZBX_JAVAGATEWAYPORT=10052
depends_on:
- zabbix-mysql
network_mode: host
zabbix-agent:
image: zabbix/zabbix-agent
restart: always
environment:
- ZBX_HOSTNAME=Zabbix server
- ZBX_SERVER_HOST=192.168.15.131
- ZBX_SERVER_PORT=10051
network_mode: host