docker快速搭建并使用Zabbix

这篇具有很好参考价值的文章主要介绍了docker快速搭建并使用Zabbix。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

docker搭建并使用Zabbix

0 zabbix基础知识

docker zabbix,demo,运维,监控,zabbix,监控告警,实战

  1. zabbix-server
    zabbix 的server 端,负责接收agent发送过来的监控数据,并且提供zabbix的所有核心功能。
  2. database
    用于存储监控数据和配置信息的数据库,目前常用的有mysql和postgresql两种数据库。
  3. zabbix-web
    zabbix的UI端,提供操作控制台和监控展示等功能。
  4. zabbix-java-gateway
    用于监控Java程序的JVM状态,zabbix本身无法直接从jvm获取监控指标,需使用该网关来实现。【因此zabbix-java-gateway不是必须安装的,如果要监控java程序则需要安装】
  5. zabbbix-agent
    zabbix的代理端,部署在目标主机上,用于收集主机的监控数据,并提供给到zabbix server。

注意:zabbix6.0所需环境需要centos8.0

# 查看centos版本
cat /etc/centos-release
# 查看linux版本
cat /proc/version

1 安装并启动docker

yum install -y yum-utils
yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo
yum install docker
systemctl start docker

2 拉取mysql、zabbix-server等镜像

docker pull mysql:5.7
docker pull docker.io/zabbix/zabbix-web-nginx-mysql:centos-5.4-latest
docker pull docker.io/zabbix/zabbix-server-mysql:centos-5.4-latest
①运行mysql
  1. 创建存储卷,用于持久化mysql数据
docker volume create -d local mysql_data  # 存放mysql的数据
docker volume create -d local mysql_logs  # 存放mysql的日志
docker volume create -d local mysql_conf  # 存放mysql的配置文件

说明:存储卷默认存储位置路径为:/var/lib/docker/volume/${volume_name}。

  1. 创建并运行mysql8容器
docker run --name mysql-server -t \
   -v mysql_data:/var/lib/mysql \
      -v mysql_logs:/var/log/mysql \
      -v mysql_conf:/etc/mysql \
      -e MYSQL_DATABASE="zabbix" \
      -e MYSQL_USER="zabbix" \
      -e MYSQL_PASSWORD="zabbix_pwd" \
      -e MYSQL_ROOT_PASSWORD="123456" \
      --restart=unless-stopped \
      -d mysql:8.0 \
      --character-set-server=utf8 --collation-server=utf8_bin \
      --default-authentication-plugin=mysql_native_password

说明:zabbix6.x版本要求使用mysql8.0。

②运行zabbix-java-gateway
docker run --name zabbix-java-gateway -t \
   --restart=unless-stopped \
      -d zabbix/zabbix-java-gateway:alpine-6.2-latest
③运行zabbix-server
  1. 创建存储卷,用于存储zabbix的配置文件
docker volume create -d local zabbix_server
  1. 创建并启动zabbix-server

运行zabbix-server容器,开放10051/TCP端口,用于接收监控数据。添加–link参数,实现mysql和java-gateway容器间的互相通信。

docker run --name zabbix-server-mysql -t \
    -v zabbix_server:/etc/zabbix \
      -e DB_SERVER_HOST="mysql-server" \
      -e MYSQL_DATABASE="zabbix" \
      -e MYSQL_USER="zabbix" \
      -e MYSQL_PASSWORD="zabbix_pwd" \
      -e MYSQL_ROOT_PASSWORD="123456" \
      -e ZBX_JAVAGATEWAY="zabbix-java-gateway" \
      --link mysql-server:mysql \
      --link zabbix-java-gateway:zabbix-java-gateway \
      --restart=unless-stopped \
      -p 10051:10051 \
      -d zabbix/zabbix-server-mysql:alpine-6.2-latest

注意:此方式适合所有容器部署在同一台主机上,如果是分开部署,则在前面的步骤需要开放相关端口,并通过局域网进行连接。

④运行zabbix-web

运行zabbix-web容器,默认暴露端口80

docker run --name zabbix-web-nginx-mysql -t \
   -e PHP_TZ="Asia/Shanghai" \
   -e ZBX_SERVER_HOST="zabbix-server-mysql" \
      -e DB_SERVER_HOST="mysql-server" \
      -e MYSQL_DATABASE="zabbix" \
      -e MYSQL_USER="zabbix" \
      -e MYSQL_PASSWORD="zabbix_pwd" \
      -e MYSQL_ROOT_PASSWORD="123456" \
      --link mysql-server:mysql \
      --link zabbix-server-mysql:zabbix-server \
      -p 80:8080 \
      --restart unless-stopped \
      -d zabbix/zabbix-web-nginx-mysql:alpine-6.2-latest

如果提示端口占用:
方式一:先删除镜像,然后更换没有占用的端口(例如:zabbix-web-nginx-mysql的80端口已经被占用)

  • 删除镜像:docker rm zabbix-web-nginx-mysql
  • 更换映射端口
    -p 80:8080更换为-p 9000:8080即可

方式二:杀死占用端口的进程

  • 执行命令找到占用端口的进程号(list open files:lsof命令可以列出当前系统中被打开的文件和网络连接,包括文件名、进程ID、用户、文件类型、文件描述符等详细信息):sudo lsof -i :80
  • 杀死进程:sudo kill 进程号(processID)

执行结果:
docker zabbix,demo,运维,监控,zabbix,监控告警,实战

3 运行zabbix-agent

如果我们想要监控zabbix-server服务器上的信息,那么我们需要安装zabbix-agent

3.1 通过安装包部署(推荐)
  1. 通过rpm安装zabbix对应仓库
rpm -Uvh https://repo.zabbix.com/zabbix/6.0/rhel/7/x86_64/zabbix-release-6.0-4.el7.noarch.rpm

# 清除本地yum缓存
yum clean all
  1. 安装zabbix-agent
yum install -y zabbix-agent
  1. 启动zabbix-agent
systemctl restart zabbix-agent

# 设置开机自启
# systemctl enable zabbix-agent
3.2 通过docker部署

如果我们在docker中部署zabbix-agent,那么zabbix-server监控到的就是容器状态,而非是宿主机状态

  • 通过docker部署我们需要修改容器中配置文件的ZBX_Server_HOST,但是如果修改之后重启之后会丢失修改,所以需要编写一个DockerFile,然后构建自己的zabbix-agent镜像
    • 部分命令:
#编写DockerFile
vi Dockerfile
# DockerFile中填写下面两行信息
FROM zabbix/zabbix-agent:alpine-6.2-latest
COPY zabbix_agentd.conf /etc/zabbix/zabbix_agentd.conf
# 构建自己的镜像
docker build -t my-zabbix-agent 
#通过自己的镜像运行容器
docker run -d \
--name zabbix-agent \
 -v /var/log/zabbix:/var/log/zabbix \
 -p 10050:10050 \
 --restart=unless-stopped \
 --privileged \
 my-zabbix-agent

通过Docker部署:

# ZBX_SERVER_HOST更换为自己zabbix-server的所在地址
# 并且在zabbix的web页面中也需要填写agent的容器地址
docker run -d \
   --name zabbix-agent \
   -v /etc/zabbix \
   -v /var/log/zabbix:/var/log/zabbix \
   -e ZBX_HOSTNAME="client-01" \
   -e ZBX_SERVER_HOST="10.253.50.145" \
   -e ZBX_SERVER_PORT=10051 \
   -p 10050:10050 \
   --restart=unless-stopped \
   --privileged \
   zabbix/zabbix-agent:alpine-6.2-latest
3.3 设置web为中文及bug处理
  1. 修改zabbix的web页面,设置页面显示为中文

User settings - Profile - Language - Chinese,最后点击下方的update

docker zabbix,demo,运维,监控,zabbix,监控告警,实战
2. 修改zabbix的监控地址为agent地址

检测 - 主机 - 选择我们的zabbix-server - 鼠标单击然后选择配置

docker zabbix,demo,运维,监控,zabbix,监控告警,实战
更换agent的地址为zabbix-server的地址

因为我们此刻是在zabbix-server的机器上安装了一台zabbix-agent,目的是为了检测我们zabbix-server所在机器的状态。

  • 如果大家将zabbix-agent安装在了其他机器上,更换为对应机器ip地址即可

docker zabbix,demo,运维,监控,zabbix,监控告警,实战
3. 等待几分钟刷新页面即可

bug1:

如果发现可用性仍然没有变成绿色,并且页面报错
Asuming that agent dropped connect because of access permision,表明是我们没有开启对应的权限

  • 首先查看是否关闭了防火墙
    • 关闭防火墙命令:systemctl stop firewalld
  • 如果使用的是云服务器,查看云服务器的对应安全组策略是否开启
  • 权限不够:修改zabbix-agent的配置文件
    • vim /etc/zabbix/zabbix_agentd.conf
    • 找到Server位置,将其修改为自己server所在ip地址加网段,如:172.159.92.3/24;如果为了方便也可以将其修改为0.0.0.0/0(代表运行所有的服务器访问)
      docker zabbix,demo,运维,监控,zabbix,监控告警,实战
      完成之后,:wq保存退出,systemctl restart zabbix-agent.service重启zabbix-agent,等待几分钟之后在刷新zabbix的web页面即可
  • 如果上述方法都不行,就对应查看日志报错信息,来对应处理:
    查看日志信息:tail -f /var/log/zabbix/zabbix_agentd.log
    • 报错信息:Unable to connect to [127.0.0.1]:10051 [cannot connect to [[127.0.0.1]:10051]: [111] Connection refused]
    • 表明是服务器地址配置错了,vim /etc/zabbix/zabbix_agentd.conf,将配置文件中的ServerActive更改为zabbix-server的地址,如:10.253.50.145,记住只需要修改ip,不用携带port端口
      docker zabbix,demo,运维,监控,zabbix,监控告警,实战

bug2:

如果查询agent的日志文件发现报错信息:
23946:20230722:121107.962 no active checks on server [10.253.50.145:10051]: host [Zabbix server] not found

  • 查询日志文件命令:tail -f /var/log/zabbix/zabbix_agentd.log
  • 解决办法:修改agent配置文件中的Hostname,
    • 查看配置文件中的HostName:
      cat /etc/zabbix/zabbix_agentd.conf | grep Hostname
    • 在zabbix web页面Monitoring->Configuration->Hosts 页面更改Host name和zabbix_agentd.conf里面的Hostname一样。
      docker zabbix,demo,运维,监控,zabbix,监控告警,实战
      docker zabbix,demo,运维,监控,zabbix,监控告警,实战
  • 重启zabbix-agent

需求实战(HTTP代理+zabbix5)

客户需要监控我方服务的状态,因此我方只需要提供一个自定义模板即可(xml文件)+自定义告警模板即可

  • 方案实现:我方暴露一个API接口给Zabbix,通过HTTP代理的方式用于获取数据。【因此无需安装zabbix-agent】
①环境搭建:zabbix-server、web、mysql
  1. 安装并启动docker
yum install -y yum-utils
yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo
yum install docker
systemctl start docker

拉取mysql和zabbix的docker,因为zabbix 6以上,需要centos 8,受限于环境,这里演示zabbix 5版本的

  1. 拉取镜像并创建数据卷
# 拉取镜像
docker pull mysql:5.7
docker pull docker.io/zabbix/zabbix-web-nginx-mysql:centos-5.4-latest
docker pull docker.io/zabbix/zabbix-server-mysql:centos-5.4-latest
# 拉取完成后,开始安装
docker volume create -d local  mysql_data #存放mysql数据
docker volume create -d local  mysql_logs #存放mysql日志
docker volume create -d local  mysql_conf #存放mysql配置文件 
  1. 创建对应容器(mysql、zabbix-server、zabbix-web)
docker run --name mysql-server -t \
-v mysql_data:/var/lib/mysql \
-v mysql_logs:/var/log/mysql \
-v mysql_conf:/etc/mysql \
-e MYSQL_DATABASE="zabbix" \
-e MYSQL_USER="zabbix" \
-e MYSQL_PASSWORD="123456" \
-e MYSQL_ROOT_PASSWORD="123456" \
--restart=unless-stopped \
-d mysql:5.7 \
--character-set-server=utf8 \
--collation-server=utf8_bin \
--default-authentication-plugin=mysql_native_password

docker volume create -d local  zabbix_server
docker run --name zabbix-server-mysql -t \
-v zabbix_server:/etc/zabbix \
-e DB_SERVER_HOST="mysql-server" \
-e MYSQL_DATABASE="zabbix" \
-e MYSQL_USER="zabbix" \
-e MYSQL_PASSWORD="123456" \
-e MYSQL_ROOT_PASSWORD="123456" \
--link mysql-server:mysql \
--restart=unless-stopped \
-p 10051:10051 \
--hostname zabbix-server \
-d zabbix/zabbix-server-mysql:centos-5.4-latest

docker run --name zabbix-web-nginx-mysql -t \
-e PHP_TZ="Asia/Shanghai" \
-e ZBX_SERVER_HOST="zabbix-server-mysql" \
-e DB_SERVER_HOST="mysql-server" \
-e MYSQL_DATABASE="zabbix" \
-e MYSQL_USER="zabbix" \
-e MYSQL_PASSWORD="123456" \
-e MYSQL_ROOT_PASSWORD="123456" \
--link mysql-server:mysql \
--link zabbix-server-mysql:zabbix-server \
-p 80:8080 \
--restart unless-stopped \
--hostname zabbix-web \
-d zabbix/zabbix-web-nginx-mysql:centos-5.4-latest
  1. 创建好后,访问http://ip/zabbix。用Admin,zabbix即可登录。注意Admin是大写开头
    docker zabbix,demo,运维,监控,zabbix,监控告警,实战
②创建自动发现、自定义模板
  1. 自动发现
    因为客户部署我方的机器过多,所以采用zabbix的自动发现来自动发现主机
  • 创建自动发现(填写对应ip范围及协议端口)
  • 配置关联动作(将发现的主机添加到主机组、并添加到我方提供给客户的自定义模板)
  1. 自定义模板(Template)
    我方提供给客户所需要的模板,用于监控指定服务的数据(调用我方提供的接口获取所需要监控的信息)
  • 自定义模板下创建监控项,如:我方接口返回多个Agent信息,那么就创建一个监控项,叫Agent Item
  • 在自定义模板Template下创建自动发现(HTTP代理)、监控项原型(agent的信息等,如:name、cpu useage)、触发器【根据自定义模板下的HTTP代理请求回来的数据,自动创建多个Agent,每个Agent包含对应监控项原型:name、cpu useage等】,当采集到的数据不合理时,则触发对应的触发器
完整步骤
1. 配置-模板-创建模板

docker zabbix,demo,运维,监控,zabbix,监控告警,实战

2. 将模板加入templates组,配置模板宏(方便后续自动发现时,http代理使用)

docker zabbix,demo,运维,监控,zabbix,监控告警,实战

3. 在我们新创建好的模板Ziyi Template下创建自动发现规则

docker zabbix,demo,运维,监控,zabbix,监控告警,实战
docker zabbix,demo,运维,监控,zabbix,监控告警,实战
在自动发现规则这里我们引用开始创建好的宏:
docker zabbix,demo,运维,监控,zabbix,监控告警,实战
根据自己接口返回数据的格式,判断是否需要预处理:
docker zabbix,demo,运维,监控,zabbix,监控告警,实战

比如我接口返回的是

{
	"code":1,
	"msg":"success",
	"content":[
		{
			"id":1,
			"name":"jack"
		},
		{
			"id":2,
			"name":"tom"
		}
	]
}

//那么我通过$.content预处理之后就可以获取到:
[
    [
        {
            "id": 1,
            "name": "jack"
        },
        {
            "id": 2,
            "name": "tom"
        }
    ]
]
//不过zabbix自带一层for处理,因此我们可以通过$.content.name直接遍历出每个name

docker zabbix,demo,运维,监控,zabbix,监控告警,实战

4. 创建监控项

docker zabbix,demo,运维,监控,zabbix,监控告警,实战
根据http代理获取对应监控项的值:
docker zabbix,demo,运维,监控,zabbix,监控告警,实战

5. 创建自动发现的监控项原型

自动发现-创建监控项原型

  • 配置-模板-自动发现
    docker zabbix,demo,运维,监控,zabbix,监控告警,实战

点击创建监控项原型(配合自动发现规则的宏使用可自动动态创建出监控的数据项):
docker zabbix,demo,运维,监控,zabbix,监控告警,实战
docker zabbix,demo,运维,监控,zabbix,监控告警,实战
修正:上面的键值应满足对应规则,样例:

键值(合法):ziyi.content.[{#USER_NAME}]

主要项选择我们第4步创建好的监控项User

6. 配置监控项原型的预处理

通过配置预处理步骤,来判断什么时候去获取值

docker zabbix,demo,运维,监控,zabbix,监控告警,实战
tip:jsonpath用法:
docker zabbix,demo,运维,监控,zabbix,监控告警,实战
jsonPath样例:https://www.cnblogs.com/lxmtx/p/12916659.html

7. 添加主机并应用我们的模板

监测 - 主机 - 创建主机
docker zabbix,demo,运维,监控,zabbix,监控告警,实战

8. 观察数据

监测 - 最新数据

docker zabbix,demo,运维,监控,zabbix,监控告警,实战

docker zabbix,demo,运维,监控,zabbix,监控告警,实战

9. 创建触发器(可选)

如果我们希望在数据异常时,在页面上显示告警,那么可以通过触发器实现

  • 配置-模板-自动发现-触发器类型-创建触发器原型
    docker zabbix,demo,运维,监控,zabbix,监控告警,实战
    配置告警规则:
    docker zabbix,demo,运维,监控,zabbix,监控告警,实战
    配置消警:
    docker zabbix,demo,运维,监控,zabbix,监控告警,实战
③邮件告警
  1. 创建告警媒介(邮件需要开启pop/smtp),账号需要配置为对应邮件的smtp标识码
  2. 邮件模板
//模板一
邮件主题: Agent Problem: {EVENT.NAME}

邮件内容:<b>Problem started</b> at {EVENT.TIME} on {EVENT.DATE}<br><b>Problem name:</b> {EVENT.NAME}<br><b>Host:</b> {HOST.NAME}<br><b>Severity:</b> {EVENT.SEVERITY}<br><b>Operational data:</b> {EVENT.OPDATA}<br><b>Original problem ID:</b> {EVENT.ID}<br>{TRIGGER.URL}



//模板二
主题:

故障{TRIGGER.STATUS},服务器:{HOSTNAME1},发生: {TRIGGER.NAME}故障!

内容:

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

参考文章:https://blog.csdn.net/chang_chunhua/article/details/127846551文章来源地址https://www.toymoban.com/news/detail-721957.html

到了这里,关于docker快速搭建并使用Zabbix的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 使用Docker快速搭建基础服务

    编辑broker.conf,并设置brokerIP1 上述方法需要我们单独对每一个服务进行启动,当基础服务多的时候,非常不方便,所以可以采用Docker-Compose的方式一键启动,以下是相关步骤 1.docker-compose手动安装 在这个目录下载docker-compose-Linux-x86_64: https://github.com/docker/compose/releases/tag/1.25.5

    2024年02月07日
    浏览(38)
  • 使用docker快速搭建hive环境

    写在前面 想练练Hive SQL,但是没有hive shell环境。现在只有一台空的CentOS 7机子,一想要弄jdk、hadoop、mysql、hive就头疼。 于是在网上找了找,发现用docker部署hive会快很多,在此记录一下部署过程。 以下过程每一步在文末都附有参考文档,出错的朋友可以去看对应的参考文档。

    2024年01月22日
    浏览(43)
  • 使用docker快速搭建redis哨兵模式

    本文主要参考: https://www.cnblogs.com/coderaniu/p/15352323.html https://developer.aliyun.com/article/892805 但是这两篇博客均缺失部分关键性细节,所以重新撰文。读者可以结合本文和上述文章一起阅读。 此处略 创建 docker-compose.yml 文件,内容如下: 执行命令 docker-compose up -d 创建三个redis容器

    2024年02月09日
    浏览(37)
  • 使用docker快速搭建xssPlatform测试平台实践

    笔者之前给一些开发团队多次做Web安全开发培训,为了让培训的学员能够理解XSS原理和XSS的危害,将xssPlatform进行了更新,之前一直放在GitHub中;发现关注的人越来越多,很多人在安装的过程中遇到问题不知道怎么处理,为了简化安装步骤,笔者将xssPlatform封装到了docker镜像当

    2024年02月19日
    浏览(37)
  • 使用docker快速搭建wordpress服务,并指定域名访问

    wordpress是一个基于PHP语言编写的开源的内容管理系统(CMS),它有丰富的插件和主题,可以非常简单的创建各种类型的网站,包括企业网站、电子商务网站、新闻门户、论坛等等。 强大的社区支持:WordPress拥有庞大的用户社区,你可以在社区中获取帮助、分享经验和学习新技

    2024年02月13日
    浏览(38)
  • 【运维知识进阶篇】Zabbix5.0稳定版详解11(在Grafana中使用Zabbix插件:安装Grafana+安装Zabbix插件+添加数据源+Grafana直连MySQL数据库取值)

    本篇文章给大家介绍在Grafana中使用Zabbix插件,Zabbix扩展的很多,该讲的基本上全讲了,这篇文章结束后,就考虑换个内容了。 Grafana是用于可视化大型测量数据的开源程序,类似于Kibana,我们在里面使用zabbix插件,可以实现对其他主机的监控,监控数据能够更好的显示出来。

    2024年01月15日
    浏览(58)
  • Mybatis-Plus 代码生成器,自定义模板Demo,快速搭建!!

    详细信息以及具体配置方法解析–》官方文档:https://baomidou.com/ velocity 和 freemarker 选择导入,velocity 对应vm的模板,freemarker 对应flt模板,自定义模板,需要将导入进的配置下的模板复制到自己项目的resource下 01:Mybatis-Plus 下的模板 02:自己项目 resource 新建 templates 03:maven:

    2023年04月19日
    浏览(50)
  • Storm学习之使用官方Docker镜像快速搭建Storm运行环境

    Apache Storm 官方也出了Docker 镜像 https://hub.docker.com/_/storm/ 本文我们就基于官方镜像搭建一个 Apache Storm 2.4 版本的运行环境,供大家后续学习。 有问题可以参考issue 解决, 我的安装过程一路都很顺畅。所以基本上没有看下面是我的详细操作和截图 。 可以说网上的乱七八糟的教

    2024年02月14日
    浏览(59)
  • 使用Docker快速搭建并优化Redmine环境:日志管理与健康检查指南

    Redmine是一种开源的项目管理和问题跟踪工具,它以Web应用程序的形式提供。Redmine的主要功能包括项目管理、问题跟踪、版本控制集成、Wiki和论坛等。它是用Ruby on Rails开发的,支持多语言和多数据库。Redmine的灵活性和可扩展性使其成为许多组织和团队用于协作和项目管理的

    2024年04月28日
    浏览(38)
  • 【物联网】EMQX(二)——docker快速搭建EMQX 和 MQTTX客户端使用

    在上一篇文章中,小编向大家介绍了物联网必然会用到的消息服务器EMQ,相信大家也对EMQ有了一定的了解,那么接下来,小编从这篇文章正式开始展开对EMQ的学习教程,本章节来记录一下如何对EMQ进行安装。 EMQ作为第三方中间件,可以安装到很多种平台上,比如macOS、window

    2024年02月03日
    浏览(53)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包