zabbix

zabbix-server

只用docker搭建

zabbix-web

#!/bin/bash

version="centos-5.0.2"
docker_name="zabbix-web-nginx-pgsql"

docker stop ${docker_name}
docker rm ${docker_name}
docker run -d --name ${docker_name} \
--restart=always \
--link zabbix-server:zabbix-server \
--link zabbix-postgres:zabbix-postgres \
-e DB_SERVER_HOST="zabbix-postgres" \
-e POSTGRES_USER="postgres" \
-e POSTGRES_PASSWORD="password" \
-e ZBX_SERVER_HOST="zabbix-server" \
-e PHP_TZ="Asia/Shanghai" \
-p 8800:8080 \
-v /etc/localtime:/etc/localtime:ro \
-v /etc/timezone:/etc/timezone:ro \
zabbix/zabbix-web-nginx-pgsql:${version}

解决中文乱码

C:\Windows\Fonts\中找到simkai或者楷体 常规并上传到服务器

docker cp simkai.ttf zabbix-web-nginx-pgsql:/usr/share/zabbix/assets/fonts/DejaVuSans.ttf

zabbix-server

#!/bin/bash
version="centos-5.0.2"

docker_name=zabbix-server

docker kill zabbix-server
docker rm zabbix-server
docker run -d --name zabbix-server \
--restart=always \
--hostname $(hostname) \
--add-host $(hostname):10.0.18.2 \
--link zabbix-postgres:zabbix-postgres \
-p 10051:10051 \
-e DB_SERVER_HOST="zabbix-postgres" \
-e POSTGRES_USER="postgres" \
-e POSTGRES_PASSWORD="password" \
-e ZBX_CACHESIZE=16M \
-e ZBX_VALUECACHESIZE=64M \
-v /etc/localtime:/etc/localtime:ro \
-v /etc/timezone:/etc/timezone:ro \
zabbix/zabbix-server-pgsql:${version}

zabbix-postgres

#!/bin/sh
echo 'Asia/Shanghai' > /etc/timezone

docker_name=zabbix-postgres

chown -R polkitd.root data-${docker_name}/

docker stop ${docker_name}
docker rm ${docker_name}
docker run -d --name ${docker_name} \
--restart=always \
-e POSTGRES_PASSWORD=password \
-v /etc/localtime:/etc/localtime:ro \
-v /etc/timezone:/etc/timezone:ro \
-v $(pwd)/data-${docker_name}:/var/lib/postgresql/data \
postgres:9.6

zabbix-agent

安装zabbix-agent

由于用docker安装不一定能获取到所有数据/正确数据,故使用宿主机安装

rpm -Uvh https://repo.zabbix.com/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm

# 如果是国内就换源
sed -i 's#http://repo.zabbix.com#https://mirrors.aliyun.com/zabbix#g' /etc/yum.repos.d/zabbix.repo

yum install zabbix-agent -y

# 修改完配置文件后启动
systemctl enable zabbix-agent --now
TIP

7.0版本: rpm -Uvh https://repo.zabbix.com/zabbix/7.0/rhel/7/x86_64/zabbix-release-7.0-1.el7.noarch.rpm

配置文件说明

/etc/zabbix/zabbix_agentd.conf

被动模式(server主动去agent拉)

PidFile=/var/run/zabbix/zabbix_agentd.pid   //13行

LogFile=/var/log/zabbix/zabbix_agentd.log   //32行

LogFileSize=0                               //43行

Include=/etc/zabbix/zabbix_agentd.d/*.conf  //309行

//上面的是核对项,下面的是修改项//

Server=本机IP,服务器IP     //如图172.29.230.4为本机IP,172.31.254.13为服务器IP

ServerActive=服务器IP

Hostname=testhost                     //158行,指定名称

#Hostname填写要监控的主机名,Server才能根据名字找到它(此处hostname要与zabbix监控当中添加主机的主机名一致)
TIP

如果要实现自动添加, 就需要在配置文件中加上HostMetadata, 然后在服务端的动作中的自动发现动作添加, 判断主机元数据

在zabbix-server中添加

在配置->主机界面点击创建主机按钮,填写好必填项,然后在模板界面选择Template OS Linux by Zabbix agent

等一会后就显示连接成功

主动模式(agent主动推给server)

# Server=本机IP,服务器IP     //禁用

ServerActive=服务器IP

Hostname=testhost                     //158行,指定名称

StartAgents=0 //启用主动模式

#Hostname填写要监控的主机名,Server才能根据名字找到它(此处hostname要与zabbix监控当中添加主机的主机名一致)
在zabbix-server中添加

在配置->主机界面点击创建主机按钮,填写好必填项,然后在模板界面选择Template OS Linux by Zabbix agent active

等一会后就显示连接成功

zabbix-proxy

安装

旧版本(5.0)
新版本(7.0)
#!/bin/bash

docker_name=zabbix-proxy-sqlite3

mkdir -p data/
chown -R 1997:1997 data/

echo "Asia/Shanghai" > /etc/timezone

docker stop ${docker_name}
docker rm ${docker_name}
docker run -d --name zabbix-proxy-sqlite3 \
--restart=always \
--net host \
--hostname xxx \
--add-host=zabbix-server:172.31.254.13 \       # zabbix-server的公网ip
-e ZBX_HOSTNAME=$(hostname) \
-e ZBX_SERVER_HOST=zabbix-server \
-e ZBX_PROXYMODE=0 \
-v /etc/localtime:/etc/localtime:ro \
-v /etc/timezone:/etc/timezone:ro \
-v $(pwd)/data/:/var/lib/zabbix/ \
zabbix/zabbix-proxy-sqlite3:centos-5.0.2


# ZBX_PROXYMODE=0 # 主动模式
# ZBX_PROXYMODE=1 # 被动模式

安装完成后,在zabbix-server管理中的agent代理程序来配置,其中主动式是proxy主动推

推送

钉钉

1、配置推送媒介,类型选择webhook,配置参数ParseMode为空,Token为钉钉的webhook的token,脚本:

var Dingtalk = {
    token: null,
    http_proxy: null,
    timeout: 5000,
    
    sendMessage: function(message) {
        var params = JSON.stringify(message);
        var request = new HttpRequest();
        request.addHeader('Content-Type: application/json');
        
        var url = 'https://oapi.dingtalk.com/robot/send?access_token=' + this.token;
        
        if (this.http_proxy) {
            request.setProxy(this.http_proxy);
        }
        
        request.setTimeout(this.timeout);
        
        try {
            var response = request.post(url, params);
            Zabbix.Log(4, '[Dingtalk Webhook] response: ' + response);
            return 'OK';
        } catch (error) {
            Zabbix.Log(4, '[Dingtalk Webhook] notification failed: ' + error);
            throw 'Failed to send notification: ' + error;
        }
    }
};

try {
    var params = JSON.parse(value);
    Dingtalk.token = params.token;
    
    if (params.http_proxy) {
        Dingtalk.http_proxy = params.http_proxy;
    }
    
    var message = {
        msgtype: 'text',
        text: {
            content: params.message
        }
    };
    
    return Dingtalk.sendMessage(message);
} catch (error) {
    Zabbix.Log(4, '[Dingtalk Webhook] notification failed: ' + error);
    throw 'Failed to send notification: ' + error;
}

2、配置Message template

问题

Problem: {EVENT.NAME}

当前状态: {TRIGGER.STATUS}
告警主机: {HOSTNAME1}
告警别名: {HOST.NAME}
告警地址: {HOST.IP}
告警时间: {EVENT.DATE} {EVENT.TIME}
告警等级: {TRIGGER.SEVERITY}
告警信息: {TRIGGER.NAME}
告警项目: {TRIGGER.KEY1}
问题详情: {ITEM.NAME}: {ITEM.VALUE}
当前状态: {TRIGGER.STATUS}: {ITEM.VALUE1}
事件ID: {EVENT.ID}

Problem recovery

Resolved in {EVENT.DURATION}: {EVENT.NAME}

当前状态: {TRIGGER.STATUS}
恢复主机: {HOSTNAME1}
恢复别名: {HOST.NAME}
恢复地址: {HOST.IP}
恢复时间: {EVENT.DATE} {EVENT.TIME}
恢复等级: {TRIGGER.SEVERITY}
恢复信息: {TRIGGER.NAME}
恢复项目: {TRIGGER.KEY1}
恢复详情: {ITEM.NAME}: {ITEM.VALUE}
当前状态: {TRIGGER.STATUS}: {ITEM.VALUE1}
事件ID: {EVENT.ID}

3、在用户中配置报警媒介

4、在动作中配置媒介

对接grafana

grafana安装zabbix插件

grafana-cli plugins install alexanderzobnin-zabbix-app

安装完插件后需重启

在grafana启用zabbix

添加zabbix数据源

http://10.0.18.2:8800/api_jsonrpc.php

导入模板

https://grafana.com/grafana/dashboards/5363-zabbix-full-server-status/