docker上安装zabbix-sever实践
使用官方的zabbix-server-mysql和zabbix-web-nginx-mysql的镜像,tag是:ubuntu-3.4.1,也就是zabbix-server和web及mysql都是分开的,都可以用docker启动,zabbix-server端口是:10051,zabbix-agent端口是:10050
用docker启一个mysql或都tidb
docker启动mysql
mysql的docker启动命令如下:
docker run -d \ -p 3306:3306 \ --name mysql \ -v /etc/localtime:/etc/localtime:ro \ -v /data/mysql_data:/var/lib/mysql \ -e MYSQL_ROOT_PASSWORD=123456 \ mysql:5.6.37
docker启动tidb
tidb的启动命令如下,由于指定了容器的ip,所以先需要创建一个网络,都如下:
#!/bin/bash #docker network create --subnet 172.18.0.0/16 --driver bridge clc #start pd-cluster docker run -d --name pd1 \ -p 22379:2379 \ -p 22380:2380 \ --network clc \ --ip 172.18.0.201 \ -v /etc/localtime:/etc/localtime:ro \ -v /root/docker/tidb_docker/data_pd1:/data \ pingcap/pd:pre-ga \ --name="pd1" \ --data-dir="/data/pd1" \ --client-urls="http://0.0.0.0:2379" \ --advertise-client-urls="http://172.18.0.201:2379" \ --peer-urls="http://0.0.0.0:2380" \ --advertise-peer-urls="http://172.18.0.201:2380" \ --initial-cluster="pd1=http://172.18.0.201:2380,pd2=http://172.18.0.202:2380,pd3=http://172.18.0.203:2380" docker run -d --name pd2 \ -p 22389:2379 \ -p 22390:2380 \ --network clc \ --ip 172.18.0.202 \ -v /etc/localtime:/etc/localtime:ro \ -v /root/docker/tidb_docker/data_pd2:/data \ pingcap/pd:pre-ga \ --name="pd2" \ --data-dir="/data/pd2" \ --client-urls="http://0.0.0.0:2379" \ --advertise-client-urls="http://172.18.0.202:2379" \ --peer-urls="http://0.0.0.0:2380" \ --advertise-peer-urls="http://172.18.0.202:2380" \ --initial-cluster="pd1=http://172.18.0.201:2380,pd2=http://172.18.0.202:2380,pd3=http://172.18.0.203:2380" docker run -d --name pd3 \ -p 22399:2379 \ -p 22400:2380 \ --network clc \ --ip 172.18.0.203 \ -v /etc/localtime:/etc/localtime:ro \ -v /root/docker/tidb_docker/data_pd3:/data \ pingcap/pd:pre-ga \ --name="pd3" \ --data-dir="/data/pd3" \ --client-urls="http://0.0.0.0:2379" \ --advertise-client-urls="http://172.18.0.203:2379" \ --peer-urls="http://0.0.0.0:2380" \ --advertise-peer-urls="http://172.18.0.203:2380" \ --initial-cluster="pd1=http://172.18.0.201:2380,pd2=http://172.18.0.202:2380,pd3=http://172.18.0.203:2380" #start tikv-cluster docker run -d --name tikv1 \ -p 20160:20160 \ --network clc \ --ip 172.18.0.204 \ --ulimit nofile=1000000:1000000 \ -v /etc/localtime:/etc/localtime:ro \ -v /root/docker/tidb_docker/data_tikv1:/data \ pingcap/tikv:pre-ga \ --addr="0.0.0.0:20160" \ --advertise-addr="172.18.0.204:20160" \ --data-dir="/data/tikv1" \ --pd="172.18.0.201:2379,172.18.0.202:2379,172.18.0.203:2379" docker run -d --name tikv2 \ -p 20161:20160 \ --network clc \ --ip 172.18.0.205 \ --ulimit nofile=1000000:1000000 \ -v /etc/localtime:/etc/localtime:ro \ -v /root/docker/tidb_docker/data_tikv2:/data \ pingcap/tikv:pre-ga \ --addr="0.0.0.0:20160" \ --advertise-addr="172.18.0.205:20160" \ --data-dir="/data/tikv2" \ --pd="172.18.0.201:2379,172.18.0.202:2379,172.18.0.203:2379" docker run -d --name tikv3 \ -p 20162:20160 \ --network clc \ --ip 172.18.0.206 \ -v /etc/localtime:/etc/localtime:ro \ --ulimit nofile=1000000:1000000 \ -v /root/docker/tidb_docker/data_tikv3:/data \ pingcap/tikv:pre-ga \ --addr="0.0.0.0:20160" \ --advertise-addr="172.18.0.206:20160" \ --data-dir="/data/tikv3" \ --pd="172.18.0.201:2379,172.18.0.202:2379,172.18.0.203:2379" #start tidb docker run -d --name tidb \ -p 4001:4000 \ -p 10081:10080 \ --network clc \ --ip 172.18.0.207 \ -v /root/docker/tidb_docker/tikv_binlog_socket:/tmp \ -v /etc/localtime:/etc/localtime:ro \ pingcap/tidb:pre-ga \ --store=tikv \ --path="172.18.0.201:2379,172.18.0.202:2379,172.18.0.203:2379" \ --binlog-socket=/tmp/pump.sock
启动zabbix-server-mysql
考虑到以后自己增加插件和修改配置之类的,所以我会把一些目录映射到宿主机上,所以对应映射目录需要先补上配置文件,可以先启动一个测试的zabbix-server-mysql版本,把对应目录里的内容复制过来就可以了,测试了只需要复制zabbix_conf目录下的zabbix_server.conf文件就可以了,其它的目录它会自动创建。
启动命令如下:
docker run -d \ --name zabbix \ -e DB_SERVER_HOST="192.168.7.231" \ -e MYSQL_DATABASE="zabbix" \ -e DB_SERVER_PORT="4001" \ -e MYSQL_USER="root" \ -e MYSQL_PASSWORD="123456" \ -e MYSQL_ROOT_PASSWORD="123456" \ --link mysql:mysql \ -p 10051:10051 \ -v /etc/localtime:/etc/localtime:ro \ -v /root/docker/zabbix-server/var-lib-zabbix:/var/lib/zabbix \ -v /root/docker/zabbix-server/usr_lib_zabbix_alertscripts:/usr/lib/zabbix/alterscripts \ -v /root/docker/zabbix-server/usr_lib_zabbix_externalscripts:/usr/lib/zabbix/externalscripts \ -v /root/docker/zabbix-server/zabbix_conf:/etc/zabbix/ \ zabbix/zabbix-server-mysql:ubuntu-3.4.1
宿主机映射目录结构如下:
[root@node1 zabbix-server]# tree ./ -p ./ ├── [-rw-r--r--] start.sh ├── [-rw-r--r--] start_zabbix_web.sh ├── [drwxr-xr-x] usr_lib_zabbix_alertscripts ├── [drwxr-xr-x] usr_lib_zabbix_externalscripts ├── [drwxr-xr-x] var_lib_zabbix │ ├── [drwxr-xr-x] enc │ ├── [drwxr-xr-x] mibs │ ├── [drwxr-xr-x] modules │ ├── [drwxr-xr-x] snmptraps │ ├── [drwxr-xr-x] ssh_keys │ └── [drwxr-xr-x] ssl │ ├── [drwxr-xr-x] certs │ ├── [drwxr-xr-x] keys │ └── [drwxr-xr-x] ssl_ca ├── [drwxr-xr-x] var-lib-zabbix │ ├── [drwxr-xr-x] enc │ ├── [drwxr-xr-x] mibs │ ├── [drwxr-xr-x] modules │ ├── [drwxr-xr-x] snmptraps │ ├── [drwxr-xr-x] ssh_keys │ └── [drwxr-xr-x] ssl │ ├── [drwxr-xr-x] certs │ ├── [drwxr-xr-x] keys │ └── [drwxr-xr-x] ssl_ca └── [drwxr-xr-x] zabbix_conf └── [-rw-r--r--] zabbix_server.conf 23 directories, 3 files [root@node1 zabbix-server]#
启动zabbix-web-nginx-mysql
这个也需要映射一个zabbix.config.php文件,因为这个文件里有zabbix-server的配置,所以启动之后需要修改,不然web界面会提示zabbix-server is not running.
启动命令如下:
docker run -d \ --name zabbix-web \ -e DB_SERVER_HOST="192.168.7.231" \ -e MYSQL_DATABASE="zabbix" \ -e DB_SERVER_PORT="4001" \ -e MYSQL_USER="root" \ -e MYSQL_PASSWORD="123456" \ -e MYSQL_ROOT_PASSWORD="123456" \ -e PHP_TZ="Asia/Shanghai" \ --link mysql:mysql \ --link zabbix:zabbix \ -v /etc/localtime:/etc/localtime:ro \ -v /root/docker/zabbix-web-nginx-php/zabbix_web_config:/etc/zabbix/web \ -p 80:80 \ zabbix/zabbix-web-nginx-mysql:ubuntu-3.4.1
启动之后需要修改 zabbix.config.php中的$ZBX_SERVER = 'zabbix';
,这个参数要修改成zabbix-server上的ip,或者是docker上link的名字。
启动zabbix-agent
这个也需要一个配置文件映射出来,好配置如zabbix-server,及数据库相关的配置,虽然可以通过环境变量传输进去。但这个其实是监控容器里面的,
实测发现:网卡这块就是容器里面的,不能监控宿主机里面的。 所以监控宿主机的还是在宿主机上安装zabbix-agent吧。
启动命令如下:
[root@node1 zabbix-agent]# cat start_agent.sh docker run -d \ --name zabbix-agent \ -p 10050:10050 \ --privileged \ -e ZBX_HOSTNAME='zabbix_agent_232' \ -e ZBX_SERVER_HOST='zabbix,172.17.0.1,192.168.7.230,127.0.0.1' \ -v /etc/localtime:/etc/localtime:ro \ -v /root/docker/zabbix-agent/zabbix_agent_conf:/etc/zabbix \ --link zabbix:zabbix \ zabbix/zabbix-agent:ubuntu-3.4.1
报错处理
web登录报does not match
如果web界面出现这个错:The frontend does match Zabbix database
解决方法:
可以docker stop zabbix-server zabbix-web,在启动,
如果还报错,可以先关掉zabbix-server和web,然后把数据库zabbix删除掉,在启动这两个,
zabbix-server的3.4.1版本中有140个表。
原文链接:docker上安装zabbix-server,转载请注明来源!