zabbix监控docker容器
发表于:2022-04-26 |
 1、环境说明
 
 由于最近zabbix进行过一次迁移,所以zabbix-server系列采用docker方式安装,参考zabbix官网:https://github.com/zabbix/zabbix-docker。为适应本地环境和需求,docker-compose.yml文件有改动,具体内容如下:
 
 docker-compose.yml文件
 
 
 复制代码
 version: '3.5'
 services:
  zabbix-server:
   image: zabbix/zabbix-server-mysql:centos-4.2-latest
   ports:
    - "10051:10051"
   volumes:
    - /etc/localtime:/etc/localtime:ro
    - /etc/timezone:/etc/timezone:ro 
    - ./zbx_env/usr/lib/zabbix/alertscripts:/usr/lib/zabbix/alertscripts:ro
    - ./zbx_env/usr/lib/zabbix/externalscripts:/usr/lib/zabbix/externalscripts:ro
    - ./zbx_env/var/lib/zabbix/modules:/var/lib/zabbix/modules:ro
    - ./zbx_env/var/lib/zabbix/enc:/var/lib/zabbix/enc:ro
    - ./zbx_env/var/lib/zabbix/ssh_keys:/var/lib/zabbix/ssh_keys:ro
    - ./zbx_env/var/lib/zabbix/mibs:/var/lib/zabbix/mibs:ro
   links:
    - mysql-server:mysql-server
   container_name: zabbix-server
   restart: unless-stopped
   ulimits:
    nproc: 65535
    nofile:
     soft: 20000
     hard: 40000
   env_file:
    - .env_db_mysql
    - .env_srv
   secrets:
    - MYSQL_USER
    - MYSQL_PASSWORD
    - MYSQL_ROOT_PASSWORD
   user: root
   depends_on:
    - mysql-server
   stop_grace_period: 30s
   sysctls:
    - net.ipv4.ip_local_port_range=1024 65000
    - net.ipv4.conf.all.accept_redirects=0
    - net.ipv4.conf.all.secure_redirects=0
    - net.ipv4.conf.all.send_redirects=0
 
  zabbix-web-nginx-mysql:
   image: zabbix/zabbix-web-nginx-mysql:centos-4.2-latest
   ports:
    - "8081:80"
    - "8443:443"
   links:
    - mysql-server:mysql-server
    - zabbix-server:zabbix-server
   container_name: zabbix-web-nginx-mysql
   restart: unless-stopped
   volumes:
    - /etc/localtime:/etc/localtime:ro
    - /etc/timezone:/etc/timezone:ro
    - ./zbx_env/etc/ssl/nginx:/etc/ssl/nginx:ro
   env_file:
    - .env_db_mysql
    - .env_web
   secrets:
    - MYSQL_USER
    - MYSQL_PASSWORD
   user: root
   depends_on:
    - mysql-server
    - zabbix-server
   healthcheck:
    test: ["CMD", "curl", "-f", "http://localhost"]
    interval: 10s
    timeout: 5s
    retries: 3
    start_period: 30s
   stop_grace_period: 10s
   sysctls:
    - net.core.somaxconn=65535
 
  zabbix-agent:
   image: zabbix/zabbix-agent:centos-4.2-latest
   ports:
    - "10050:10050"
   volumes:
    - /etc/localtime:/etc/localtime:ro
    - /etc/timezone:/etc/timezone:ro
    - ./zbx_env/etc/zabbix/zabbix_agentd.d:/etc/zabbix/zabbix_agentd.d:ro
    - ./zbx_env/usr/lib/zabbix/alertscripts:/usr/lib/zabbix/alertscripts:ro
    - ./zbx_env/usr/lib/zabbix/externalscripts:/usr/lib/zabbix/externalscripts:ro
    - ./zbx_env/var/lib/zabbix/modules:/var/lib/zabbix/modules:ro
    - ./zbx_env/var/lib/zabbix/enc:/var/lib/zabbix/enc:ro
    - ./zbx_env/var/lib/zabbix/ssh_keys:/var/lib/zabbix/ssh_keys:ro
   links:
    - zabbix-server:zabbix-server
   restart: unless-stopped
   container_name: zabbix-agent
   env_file:
    - .env_agent
   user: root
   privileged: true
   pid: "host"
   stop_grace_period: 5s
 
  mysql-server:
   image: mysql:8.0
   ports:
    - "33060:3306"
   command: [mysqld, --character-set-server=utf8, --collation-server=utf8_bin, --default-authentication-plugin=mysql_native_password]
   volumes:
    - ./zbx_env/var/lib/mysql:/var/lib/mysql:rw
   restart: unless-stopped
   container_name: mysql-server
   env_file:
    - .env_db_mysql
   secrets:
    - MYSQL_USER
    - MYSQL_PASSWORD
    - MYSQL_ROOT_PASSWORD
   user: root
   stop_grace_period: 1m
 
 secrets:
   MYSQL_USER:
     file: ./.MYSQL_USER
   MYSQL_PASSWORD:
     file: ./.MYSQL_PASSWORD
   MYSQL_ROOT_PASSWORD:
     file: ./.MYSQL_ROOT_PASSWORD
 复制代码
 2、zabbix添加自定义监控
 
 (1)zabbix_server.conf配置
 
 #脚本路径
 AlertScriptsPath=/usr/lib/zabbix/alertscripts
 ExternalScripts=/usr/lib/zabbix/externalscripts
 (2)zabbix_agent.conf配置
 
 ##允许使用用户自定义参数
 UnsafeUserParameters=1
 ##导入该文件下的配置
 Include=/etc/zabbix/zabbix_agentd.d/*.conf
 (3)自定义监控脚本
 
 /usr/lib/zabbix/externalscripts/docker_discovery.py,搜集正在运行的容器的名称
 
 
 复制代码
 #!/usr/bin/env python
 # -*- coding: utf-8 -*
 import os
 import simplejson as json
 t=os.popen("""docker ps |grep -v 'CONTAINER ID'|awk {'print $NF'} """)
 container_name = []
 for container in t.readlines():
     r = os.path.basename(container.strip())
     container_name += [{'
上一篇:
mysql修改最大连接数&wait_timeout时间
下一篇:
zabbix自发现实时监控docker容器及容器中各个服务的状态线上业务展示