前言

  • Zabbix是企业级分布式开源监控解决方案。可以对应用服务,数据库,网络,操作系统等提供7x24小时的监控,在6.x版本开始也新增了Kubernetes监控功能;本文主要介绍如何用zabbix的实现主机监控;

安装zabbix-server

  • 这里用docker compose的方式搭建一个zabbix监控;

一、基础环境部署(安装docker)

1.先卸载旧版,如果没有的话,就不用执行了,直接第二步。

apt-get remove docker docker-engine docker.io containerd runc


2.在终端输入

apt update
apt-get install ca-certificates curl gnupg lsb-release



3.安装证书

curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -



4.写入软件源信息

sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"



5.安装

sudo apt-get install docker-ce docker-ce-cli containerd.io



中途出现问题的话,使用  sudo apt-get update 试试

6 启动Docker

systemctl start docker


7.安装工具

apt-get -y install apt-transport-https ca-certificates curl software-properties-common



8.重启docker

service docker restart


9.测试输入sudo docker run hello-world 显示以下信息则成功,第一次比较慢。

sudo docker run hello-world



10.查看版本

sudo docker version



11.查看镜像,可以看到刚才创建的镜像

sudo docker images

二、安装docker-compose

docker-compose github地址
https://github.com/docker/compose

开始安装
1、下载二进制文件
wget https://github.com/docker/compose/releases/download/v2.16.0/docker-compose-linux-x86_64

2.移动文件至/usr/local/bin/
mv docker-compose-linux-x86_64  /usr/local/bin/docker-compose

3.赋予可执行权限
chmod +x /usr/local/bin/docker-compose

4.创建软链
ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

5.测试是否安装成功
docker-compose --version

三、安装zabbix-server

# 拉取镜像
docker pull zabbix/zabbix-server-mysql:6.4.1-centos
docker pull zabbix/zabbix-web-nginx-mysql:6.4.1-centos

# 创建数据目录
mkdir -p zabbix/{data,alertscripts}
mkdir -p zabbix/mysql/{data,conf}
cd zabbix/

# 添加数据库配置
cat > mysql/conf/my.cnf <<eof
[client]
default-character-set = utf8

[mysqld]
character-set-server = utf8
collation-server = utf8_bin
default_storage_engine = InnoDB
port = 3306
datadir = /var/lib/mysql

max_connections=1000

expire_logs_days = 15
relay_log_purge = 1
slow_query_log_file = /var/log/mysql/slow.log
log-error = /var/log/mysql/error.log
log-bin = /var/log/mysql/mysqld-bin
default_authentication_plugin = mysql_native_password

socket = /tmp/mysql.sock
lower_case_table_names = 1
sql_mode = NO_ENGINE_SUBSTITUTION

default-time_zone='+8:00'
eof

# 授权文件
chmod 644 mysql/conf/my.cnf

# 添加compose
cat > docker-compose.yml <<eof
version: '3.9'
networks:
  zbx:
    driver: bridge
services:
  zabbix-mysql:
    image: mysql:8.0.30
    hostname: mysql
    container_name: mysql
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - ./mysql/conf/my.cnf:/etc/my.cnf
      - ./mysql/data:/var/lib/mysql
    restart: always
    privileged: true
    command: --character-set-server=utf8 --collation-server=utf8_bin
    environment:
      - MYSQL_ROOT_PASSWORD=Egfi9Jnn9BzJf3Q6
      - MYSQL_DATABASE=zabbix
      - MYSQL_USER=zabbix
      - MYSQL_PASSWORD=zabbix
      - TZ=Asia/Shanghai
      - LANG=en_US.UTF-8
    ports:
      - 3306:3306
    networks:
      - zbx

  zabbix-server:
    image: zabbix/zabbix-server-mysql:6.4.1-centos
    container_name: zabbix-server
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - ./data:/var/lib/zabbix/
      - ./alertscripts:/usr/lib/zabbix/alertscripts:ro
    restart: always
    privileged: true
    environment:
      - DB_SERVER_HOST=zabbix-mysql
      - DB_SERVER_PORT=3306
      - MYSQL_ROOT_PASSWORD=Egfi9Jnn9BzJf3Q6
      - MYSQL_DATABASE=zabbix
      - MYSQL_USER=zabbix
      - MYSQL_PASSWORD=zabbix
      - ZBX_CACHESIZE=1G
      - ZBX_HISTORYCACHESIZE=512M
      - ZBX_HISTORYINDEXCACHESIZE=32M
      - ZBX_TRENDCACHESIZE=256M
      - ZBX_VALUECACHESIZE=256M
      - ZBX_STARTPINGERS=64
      - ZBX_IPMIPOLLERS=1
      - ZBX_ENABLE_SNMP_TRAPS=true
      - ZBX_STARTTRAPPERS=1
    ports:
      - 10051:10051
    networks:
      - zbx

  zabbix-web:
    image: zabbix/zabbix-web-nginx-mysql:6.4.1-centos
    container_name: zabbix-web
    volumes:
      - /etc/localtime:/etc/localtime:ro
    restart: always
    privileged: true
    environment:
      - ZBX_SERVER_NAME=Zabbix 6.0
      - ZBX_SERVER_HOST=zabbix-server
      - ZBX_SERVER_PORT=10051
      - DB_SERVER_HOST=zabbix-mysql
      - DB_SERVER_PORT=3306
      - MYSQL_ROOT_PASSWORD=Egfi9Jnn9BzJf3Q6
      - MYSQL_DATABASE=zabbix
      - MYSQL_USER=zabbix
      - MYSQL_PASSWORD=zabbix
      - PHP_TZ=Asia/Shanghai
    ports:
      - 80:8080
    networks:
      - zbx
eof

# 启动服务
docker compose up zabbix-mysql -d && sleep 5
docker compose up -d
  • 启动成功后,登陆页面,默认账号是 Admin / zabbix ;

centos7 docker安装部署Zabbix6.4.1搭建与主机监控 自动注册 制作仪表盘_docker

四、安装zabbix-agent

  • zabbix-agent是采集主机指标的客户端,这里使用二进制包的安装方式,多台主机的情况下建议使用ansible去批量安装;
# 获取安装包: https://www.zabbix.com/cn/download
wget -c https://cdn.zabbix.com/zabbix/binaries/stable/6.4/6.4.1/zabbix_agent-6.4.1-linux-3.0-amd64-static.tar.gz
mkdir -p /usr/local/zabbix
tar xf zabbix_agent-6.4.1-linux-3.0-amd64-static.tar.gz -C /usr/local/zabbix

# 添加用户
useradd -s /sbin/nologin -M zabbix
chown zabbix.root -R /usr/local/zabbix

# 添加配置文件
rm -rf /usr/local/zabbix/conf/zabbix_agentd/*
cat > /usr/local/zabbix/conf/zabbix_agentd.conf <<eof
PidFile=/usr/local/zabbix/logs/zabbix_agentd.pid
LogFile=/usr/local/zabbix/logs/zabbix_agentd.log
LogFileSize=100
ListenPort=10050
StartAgents=2               # 启动的采集线程数
Server=172.16.110.169       # zabbix-server的地址
ServerActive=172.16.110.169 # zabbix-server的地址
HostMetadata=basic          # 定义主机元数据,在做自动注册时会用到
Include=/usr/local/zabbix/conf/zabbix_agentd/*.conf
eof
  • 添加system脚本管理agent服务;

# 创建脚本
cat > /usr/lib/systemd/system/zabbix-agent.service <<eof
[Unit]
Description=Zabbix Agent
After=syslog.target
After=network.target

[Service]
Type=simple
Restart=on-failure
PIDFile=/usr/local/zabbix/logs/zabbix_agentd.pid
KillMode=control-group
ExecStart=/usr/local/zabbix/sbin/zabbix_agentd -c /usr/local/zabbix/conf/zabbix_agentd.conf
ExecStop=/bin/kill -SIGTERM $MAINPID
RestartSec=10s
User=zabbix
Group=zabbix

[Install]
WantedBy=multi-user.targe
eof

# 启动服务
systemctl daemon-reload
systemctl enable zabbix-agent --now

五、自动注册

(适用于使用zabbix-agent客户端程序的服务器)

  • 自动注册是由zabbix-agent端来自动的向服务端主动向服务端注册添加,这种方式能够减少服务端的资源消耗;
  • (告警----动作----自动注册动作)

centos7 docker安装部署Zabbix6.4.1搭建与主机监控 自动注册 制作仪表盘_docker_02

1.添加匹配条件,注册动作;

1.1名称:basic server register

1.2添加--主机源数据 ---匹配----值:basic

centos7 docker安装部署Zabbix6.4.1搭建与主机监控 自动注册 制作仪表盘_mysql_03

centos7 docker安装部署Zabbix6.4.1搭建与主机监控 自动注册 制作仪表盘_centos_04

2.添加操作

centos7 docker安装部署Zabbix6.4.1搭建与主机监控 自动注册 制作仪表盘_docker_05

  • 如下是添加成功此自动注册

centos7 docker安装部署Zabbix6.4.1搭建与主机监控 自动注册 制作仪表盘_mysql_06

  • 添加成功后,agent主机会自动向zabbix注册 使用的是计算机名(所以计算机名不要一样)

centos7 docker安装部署Zabbix6.4.1搭建与主机监控 自动注册 制作仪表盘_docker_07

六、制作仪表盘

  • zabbix的仪表盘默认并没有主机指标的展示,这里自己制作一个展示主机的指标图表;

centos7 docker安装部署Zabbix6.4.1搭建与主机监控 自动注册 制作仪表盘_mysql_08

  • 添加一个前排主机面板,把要展示的主机组,指标加上;
主机标签
tpye physical

列数:
主机名  主机名称
运行时间 System uptime  (监控项中选择)
登陆用户数  Number of logged in users (监控项中选择)
CPU使用率 CPU utilization (监控项中选择)
内存利用率 Memory utilization  (监控项中选择)
总内存 Total memory  (监控项中选择)
系统盘空间    /: Total spsce (监控项中选择)

centos7 docker安装部署Zabbix6.4.1搭建与主机监控 自动注册 制作仪表盘_centos_09



  • 效果展示;

centos7 docker安装部署Zabbix6.4.1搭建与主机监控 自动注册 制作仪表盘_docker_10