Skip to content

server_docker

遇见王斌 edited this page Feb 21, 2018 · 34 revisions

1 简介

Zabbix server 容器 (meetbill/zabbix) 提供以下服务

  • Zabbix 服务端,端口为 10051
  • Zabbix Web 端口为 10080 (e.g. http://$container_ip:10080 )
  • MySQL instance supporting Zabbix, 用户为 zabbix 密码为zabbix
  • Monit deamon managing the processes (http://$container_ip:2812, user 'myuser' and password 'mypassword').

2 使用

2.1 安装 Docker

CentOS7.3 安装 Docker 可以查看 手册 中 Docker 安装部分

2.2 运行容器

#docker run -d  \
--restart always \
-p 10051:10051 \
-p 10080:80 \
-p 2812:2812 \
-v /var/lib/zabbix/:/var/lib/mysql \
-v /etc/zabbix/alert:/etc/zabbix/alert \
--name zabbix meetbill/zabbix

执行上述命令后,会拉取meetbill/zabbix镜像,并指定启动后的容器名字为zabbix,启动容器后,会花费一点儿时间初始化数据库,可以通过下面命令查看初始化数据库进度

同时运行容器时加

  • -v /var/lib/zabbix:/var/lib/mysql 将 mysql 数据存储在本地目录 /var/lib/zabbix 中
  • -v /etc/zabbix/alert:/etc/zabbix/alert 可以在此目录配置邮件监控发送邮箱配置
#docker logs -f zabbix
-------------------------------------------------------------- 出现以下内容初始化 OK
Running Monit...
'mysqld' process is not running
 New Monit id: 82f51c8f1808824fa723284546da261e
 Stored in '/root/.monit.id'
Starting Monit 5.22.0 daemon with http interface at [*]:2812
'98a2937cc0ee' Monit 5.22.0 started
'mysqld' trying to restart
'mysqld' start: '/sbin/service mysqld start'
'mysqld' process is running with pid 567
'zabbix-server' start: '/sbin/service zabbix-server start'
'nginx' start: '/sbin/service nginx start'
'php-fpm' trying to restart
'php-fpm' start: '/sbin/service php-fpm start'
'php-fpm' process is not running
'php-fpm' process is running with pid 670

2.3 访问

浏览器中输入http:// 服务 IP 地址:10080即可以看到 Dabbix 登陆界面

  • 登陆名 Admin
  • 登陆密码 zabbix

3 运维

3.1 连接容器

# docker exec -i -t zabbix /bin/bash

3.2 查看服务运行状态

访问 http://ip:2812 (其中的 IP 更换为服务器 IP)

  • 登陆名:myuser
  • 密码:mypassword

3.3 日志说明

HttpRequest: access denied -- client [10.20.133.44]: missing or invalid Authorization header

上面日志说明有用户访问 monit

3.4 清理容器

#docker stop zabbix
#docker rm zabbix
#docker rmi meetbill/zabbix

3.5 清除数据重新启动

#docker stop zabbix
#rm -rf /var/lib/zabbix
#docker start zabbix

3.6 Zabbix 容器无法正常启动时如何进入 debug 模式

在 mysql 数据卷本地磁盘目录创建 .meetbill-debug 文件

如 mysql 数据存放在 /var/lib/zabbix 则
$cd /var/lib/zabbix
$touch .meetbill-debug

4 FAQ

4.1 服务器异常关闭重启后 Zabbix server 容器无法启动

【此问题已解决】

遇到的问题是 Docker 容器启动后自动退出,如果容器启动参数时包含“--restart=always” 或“--restart”则会不停重启

提示如下

# docker logs zabbix
Monit daemon with PID 1 awakened
Running Monit...
Monit daemon with PID 1 awakened
Running Monit...
Monit daemon with PID 1 awakened

原因

容器的 PID1 进程(初始化进程)运行时异常退出。docker 检测有异常则重启容器,然后容器检测到已经有 monit 进程(查看有 /var/run/monit.pid 文件),则返回 "Monit daemon with PID 1 awakened" 然后退出。

4.2 Zabbix server 容器监控本机物理机

  • 背景

    Zabbix server 使用容器安装,agent 装在物理机上,zabbix_server 监控本机的物理机器时
    
  • 问题

    Zabbix server 容器监控其他物理机器使用物理机器的真实 IP 即可,监控容器本身所在的物理机器时会有问题,提示如下

    # Zabbix server 容器中获取容器所在物理机上的 agent 的信息
    [root@328ac2a86196 zabbix]# zabbix_get -s 192.168.1.2 -k agent.ping
    zabbix_get [1527]: Check access restrictions in Zabbix agent configuration
    
    # Zabbix agent 日志
    server 访问 agent 时问题
    [时间] failed to accept an incoming connection: connection from "172.17.0.8" rejected, allowed hosts: "192.168.1.2"
    
  • 分析

    zabbix server 访问本机物理机器的 zabbix agent 时使用的容器中的 IP ,与 zabbix agent 配置的地址(本机物理机实际地址不符)
    
  • 解决方法 (1) 修改 Agent 中的 Zabbix server IP 地址为 Zabbix server 容器 IP

    物理机器安装 zabbix_agent 时
    配置 zabbix_server 的 IP 为 zabbix_server 的容器 IP
    获取 zabbix server 容器 IP 的方式 (docker inspect -f '{{.NetworkSettings.IPAddress}}' zabbix)
    

    (2) 启动容器使用 Host 网络模式

注意:使用命令获取到的容器 IP 地址写入到文件中后面会有^M,可以通过echo ${IP} | sed 's/\r//g'方式去掉

4.3 容器启动时挂载卷只读导致 mysql 无法启动成功

CentOS 7.3 上遇到此问题时,查看下 selinux 是否已关闭,可以关闭状态下,重新启动容器

在逻辑卷后添加:rw显式的表面挂载卷可读写

#docker stop zabbix
#docker rm zabbix
#docker run -d  \
--restart always \
-p 10051:10051 \
-p 10080:80 \
-p 2812:2812 \
-v /var/lib/zabbix/:/var/lib/mysql:rw \
-v /etc/zabbix/alert:/etc/zabbix/alert:rw \
--name zabbix meetbill/zabbix