Zabbix 简介[1]

Zabbix 是由 Alexei Vladishev 开发的一种网络监视、管理系统,基于 Server-Client 架构。可用于监视各种网络服务、服务器和网络机器等状态。

Zabbix 使用 MySQL、PostgreSQL、SQLite、Oracle 或 IBM DB2 储存资料。Server 端基于 C语言、Web 前端则是基于 PHP 所制作的。Zabbix 可以使用多种方式监视。可以只使用 Simple Check 不需要安装 Client 端,亦可基于 SMTP 或 HTTP 等各种协定做死活监视。在客户端如 UNIX、Windows 中安装 Zabbix Agent 之后,可监视 CPU 负荷、网络使用状况、硬盘容量等各种状态。而就算没有安装 Agent 在监视对象中,Zabbix 也可以经由 SNMP、TCP、ICMP检查,以及利用 IPMI、SSH、telnet 对目标进行监视。另外,Zabbix 包含 XMPP 等各种 Item 警示功能。

Zabbix 功能和特性[2]

安装与配置简单

可视化web管理界面

免费开源

支持中文

自动发现

分布式监控

实时绘图

环境

Kubernetes 版本 1.15.6

Zabbix 版本 3.4.7 (镜像,在官方基础上修改,下文会具体介绍)

Mariadb 版本 10.3.5

Zabbix Dockerfile 修改

zabbix-server-mysql:Dockerfile 在官方基础上修改,添加 python支持,用于支持python通知脚本环境;时区修改为上海时区;

FROM zabbix/zabbix-server-mysql:alpine-3.4.7

RUN cp /etc/apk/repositories /etc/apk/repositories.bak \

&& echo "http://mirrors.aliyun.com/alpine/v3.4/main/" > /etc/apk/repositories \

&& apk add --update python python-dev py-pip build-base \

&& apk add -U tzdata \

&& cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \

&& pip install requests configparser \

&& touch /tmp/zabbix_dingding.log \

&& chown zabbix:zabbix /tmp/zabbix_dingding.log \

&& rm -rf /var/cache/apk/*

WORKDIR /var/lib/zabbix

EXPOSE 10051/TCP

VOLUME ["/usr/lib/zabbix/alertscripts", "/usr/lib/zabbix/externalscripts", "/var/lib/zabbix/enc", "/var/lib/zabbix/mibs", "/var/lib/zabbix/modules"]

VOLUME ["/var/lib/zabbix/snmptraps", "/var/lib/zabbix/ssh_keys", "/var/lib/zabbix/ssl/certs", "/var/lib/zabbix/ssl/keys", "/var/lib/zabbix/ssl/ssl_ca"]

ENTRYPOINT ["docker-entrypoint.sh"]

zabbix-web-nginx-mysql:Dockerfile 在官方基础上修改,添加中文字体,解决查看web监控时中文乱码;时区修改为上海时区;

msyh.ttf 字体,可以从下文已打好的镜像获取。

FROM zabbix/zabbix-web-nginx-mysql:alpine-3.4.7

COPY msyh.ttf /usr/share/fonts/ttf-dejavu/DejaVuSans.ttf

RUN cp /etc/apk/repositories /etc/apk/repositories.bak \

&& echo "http://mirrors.aliyun.com/alpine/v3.4/main/" > /etc/apk/repositories \

&& apk add -U tzdata \

&& cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \

&& rm -rf /var/cache/apk/*

EXPOSE 80/TCP 443/TCP

WORKDIR /usr/share/zabbix

VOLUME ["/etc/ssl/nginx"]

ENTRYPOINT ["docker-entrypoint.sh"]

Zabbix K8S 部署

首先部署 Mariadb

PS:NFS 提供存储

$ vim mariadb-pv.yaml

apiVersion: v1

kind: PersistentVolume

metadata:

name: mariadb-pv

namespace: kube-system

spec:

capacity:

storage: 100Gi

accessModes:

- ReadWriteMany

persistentVolumeReclaimPolicy: Retain

nfs:

path: /nfs-data/mariadb_db_data

server: 192.16.3.6

$ vim mariadb-pvc.yaml

apiVersion: v1

kind: PersistentVolumeClaim

metadata:

name: mariadb-pvc

namespace: kube-system

spec:

accessModes:

- ReadWriteMany

resources:

requests:

storage: 100Gi

$ vim mariadb-deploy.yaml

apiVersion: v1

kind: Service

metadata:

name: mariadb-server

namespace: kube-system

labels:

name: mariadb-server

spec:

ports:

- port: 3306

targetPort: 3306

protocol: TCP

selector:

name: mariadb-server

---

apiVersion: extensions/v1beta1

kind: Deployment

metadata:

name: mariadb-server

namespace: kube-system

labels:

name: mariadb-server

spec:

replicas: 1

revisionHistoryLimit: 3

strategy:

rollingUpdate:

maxSurge: 30%

maxUnavailable: 30%

template:

metadata:

labels:

name: mariadb-server

spec:

volumes:

- name: mariadb-storage

persistentVolumeClaim:

claimName: mariadb-pvc

hostname: mariadb-server

containers:

- name: mariadb-server

image: yangpeng2468/mariadb:10.3.5

resources:

limits:

cpu: 400m

memory: 1024Mi

requests:

cpu: 100m

memory: 100Mi

imagePullPolicy: IfNotPresent

ports:

- containerPort: 3306

env:

- name: MYSQL_ROOT_PASSWORD

value: "Password"

volumeMounts:

- name: mariadb-storage

mountPath: /var/lib/mysql

# 部署 Mariadb

$ kubectl apply -f mariadb-pv.yaml

$ kubectl apply -f mariadb-pvc.yaml

$ kubectl apply -f mariadb-deploy.yaml

部署 Configmap 通知钉钉脚本

$ vim zabbix-dingding-conf-configmap.yaml

apiVersion: v1

kind: ConfigMap

metadata:

name: zabbix-dingding-conf

namespace: kube-system

data:

dingding.conf: |

[config]

#此文件注意权限

log=/tmp/zabbix_dingding.log

webhook=https://oapi.dingtalk.com/robot/send?access_token=${钉钉机器人token}

$ vim zabbix-dingding-script-configmap.yaml

apiVersion: v1

kind: ConfigMap

metadata:

name: zabbix-dingding-script

namespace: kube-system

data:

zabbix_dingding.py: |

#!/usr/bin/env python

# -*- coding: utf-8 -*-

import requests

import json

import sys

import time

import configparser

Headers = {'Content-Type': 'application/json'}

Time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())

config = configparser.ConfigParser()

config.read('/usr/lib/zabbix/externalscripts/dingding.conf')

# config.read('/etc/zabbix/dingding.conf')

log_file = config.get('config', 'log')

api_url = config.get('config', 'webhook')

def log(info):

#注意权限,否则写不进去日志

with open(log_file, 'a+') as infile:

infile.write(info)

def msg(text,user):

json_text = {

"msgtype": "text",

"text": {

"content": text

},

"at": {

"atMobiles": [

user

],

"isAtAll": False

}

}

r = requests.post(api_url, data=json.dumps(json_text), headers=Headers).json()

code = r["errcode"]

if code == 0:

log(Time + ":消息发送成功 返回码:" + str(code) + "\n")

else:

log(Time + ":消息发送失败 返回码:" + str(code) + "\n")

exit(3)

if __name__ == '__main__':

text = sys.argv[3]

user = sys.argv[1]

msg(text, user)

# 部署

$ kubectl apply -f zabbix-dingding-conf-configmap.yaml zabbix-dingding-script-configmap.yaml

部署 zabbix-server

$ vim zabbix-server-deploy.yaml

apiVersion: v1

kind: Service

metadata:

name: zabbix-server

namespace: kube-system

labels:

app: zabbix-server

spec:

type: NodePort

ports:

- port: 10051

targetPort: 10051

nodePort: 30017

protocol: TCP

selector:

app: zabbix-server

---

apiVersion: extensions/v1beta1

kind: Deployment

metadata:

name: zabbix-server

namespace: kube-system

labels:

app: zabbix-server

spec:

replicas: 1

revisionHistoryLimit: 3

strategy:

rollingUpdate:

maxSurge: 30%

maxUnavailable: 30%

template:

metadata:

labels:

app: zabbix-server

spec:

hostname: zabbix-server

volumes:

- name: zabbix-dingding-script

configMap:

name: zabbix-dingding-script

defaultMode: 0775

- name: zabbix-dingding-conf

configMap:

name: zabbix-dingding-conf

defaultMode: 0664

containers:

- name: zabbix-server

image: yangpeng2468/zabbix-server-mysql:3.4.7

imagePullPolicy: IfNotPresent

resources:

limits:

cpu: 400m

memory: 1024Mi

requests:

cpu: 100m

memory: 100Mi

ports:

- containerPort: 10051

env:

- name: DB_SERVER_HOST

value: "mariadb-server"

- name: MYSQL_USER

value: "zabbix"

- name: MYSQL_PASSWORD

value: "zabbix"

- name: MYSQL_DATABASE

value: "zabbix"

- name: ZBX_CACHESIZE

value: "1024M"

- name: TZ

value: "Asia/Shanghai"

volumeMounts:

- name: zabbix-dingding-script

mountPath: /usr/lib/zabbix/alertscripts

- name: zabbix-dingding-conf

mountPath: /usr/lib/zabbix/externalscripts

# 部署

$ kubectl apply -f zabbix-server-deploy.yaml

部署 zabbix-web

$ vim zabbix-web-deploy.yaml

apiVersion: v1

kind: Service

metadata:

name: zabbix-web

namespace: kube-system

labels:

app: zabbix-web

spec:

ports:

- port: 80

targetPort: 80

protocol: TCP

selector:

app: zabbix-web

---

apiVersion: extensions/v1beta1

kind: Deployment

metadata:

name: zabbix-web

namespace: kube-system

labels:

app: zabbix-web

spec:

replicas: 1

revisionHistoryLimit: 3

strategy:

rollingUpdate:

maxSurge: 30%

maxUnavailable: 30%

template:

metadata:

labels:

app: zabbix-web

spec:

hostname: zabbix-web

containers:

- name: zabbix-web

image: yangpeng2468/zabbix-web-nginx-mysql:3.4.7

imagePullPolicy: IfNotPresent

resources:

limits:

cpu: 300m

memory: 600Mi

requests:

cpu: 100m

memory: 100Mi

ports:

- containerPort: 80

env:

- name: DB_SERVER_HOST

value: "mariadb-server"

- name: ZBX_SERVER_HOST

value: "zabbix-server"

- name: MYSQL_USER

value: "zabbix"

- name: MYSQL_PASSWORD

value: "zabbix"

- name: TZ

value: "Asia/Shanghai"

- name: PHP_TZ

value: "Asia/Shanghai"

# 部署

$ kubectl apply -f zabbix-web-deploy.yaml

部署 zabbix-agent

zabbix-agent 这里不在细讲,如果使用 Docker或者k8s 部署,可以使用官方镜像 zabbix/zabbix-agent:alpine-3.4.7。也可直接下载官方安装包,部署在宿主机上,这里根据自己实际需要部署客户端。

Zabbix Dashboard

上面部署成功后,根据自己实际环境,设置外网访问k8s集群入口,Zabbix Dashboard 如下展示:

参考链接

本文由 YP小站 发布!

k8s部署zabbix_Kubernetes 中部署 Zabbix相关推荐

  1. 终于解决 k8s 集群中部署 nodelocaldns 的问题

    终于解决 k8s 集群中部署 nodelocaldns 的问题 参考文章: (1)终于解决 k8s 集群中部署 nodelocaldns 的问题 (2)https://www.cnblogs.com/ ...

  2. toncat 如何部署 java_tomcat中部署java项目

    在Tomcat中部署Java Web应用程序有两种方式:静态部署和动态部署.在下文中$CATALINA_HOME指的是Tomcat根目录. 一.静态部署 静态部署指的是我们在服务器启动之前部署我们的程 ...

  3. k8s集群中部署kong网关与konga

    kong官方文档中的部署方案因为某种奇葩的原因,不能对helm文件中的镜像拉取,所以我这里对kong的docker镜像部署. 首先要搭建postgresql 可以选择集群外搭建,也可以集群内搭建. 参 ...

  4. caas k8s主控节点如何查询_k8s中部署prometheus监控告警系统prometheus系列文章第一篇...

    前言 本篇文章主要介绍k8s集群中部署prometheus,并且配置prometheus的动态.静态服务发现,实现监控容器.物理节点.service.pod等资源指标,配置prometheus的web ...

  5. k8s中部署prometheus监控告警系统-prometheus系列文章第一篇

    前言 本篇文章主要介绍k8s集群中部署prometheus,并且配置prometheus的动态.静态服务发现,实现监控容器.物理节点.service.pod等资源指标,配置prometheus的web ...

  6. K8S集群中Pod挂载Storageclass存储卷异常排查思路

    K8S集群中Pod挂载Storageclass存储卷异常排查思路 故障描述: Jenkins是在K8S集群中部署的,Jenkins使用的各种资源以及全部创建了,但是Jenkins的Pod依旧无法启动, ...

  7. k8s部署jar包_学习K8S之路.6--- 在K8S中部署Jenkins,并使用Jenkins打包jar包

    一:部署jenkins jenkins官网:https://jenkins.io/download/ jenkins镜像:https://hub.docker.com/r/jenkins/jenkin ...

  8. 在 k8s 中部署 Prometheus 和 Grafana

    部署 Prometheus 和 Grafana 到 k8s Intro 上次我们主要分享了 asp.net core 集成 prometheus,以及简单的 prometheus 使用,在实际在 k8 ...

  9. K8S在centeros中的部署

    参考文章:Kubernetes(k8s) 1.23.6版本基于Docker的集群安装部署 其他参考:Kubernetes集群环境的搭建 一.前言: 01.如安装过程中出错,可以把整个K8S删除掉,命令 ...

最新文章

  1. 计算机操作系统:存储器的管理
  2. 架构风格:万金油CS与分层
  3. 《一》php多进程编程:第一次fork
  4. Orchard架构介绍
  5. android与php使用base64加密的字符串结果不一样解决方法
  6. 小学认识计算机硬件ppt,认识计算机硬件课件.ppt
  7. 【问题解决方案】The MathType Dll cannot be found 问题解决方案
  8. C/C++ 最易受攻击、70% 漏洞无效,揭秘全球开源组件安全现状
  9. 增加特征对预测准确率的影响
  10. PMP项目管理培训课程
  11. 随机数C语言 (就做个笔记储存一下)
  12. wine linux安装目录,[Linux]WINE安装教程
  13. 又一华尔街之狼?从洗碗工到公司董事长成功之路
  14. opencv-视频处理--画感兴趣区域(ROI)
  15. c语言等差数列试题及其答案,等差数列练习题
  16. JavaScript基础知识总结复习(一)
  17. velocity单双引号区别及转义方法
  18. 计算机网络技术期末论文,计算机网络技术专业论文题目 计算机网络技术论文题目怎么定...
  19. 素问·阴阳应象大论原文
  20. 动态网站设计——笔记

热门文章

  1. 如何做好数据安全治理
  2. 大数据分析方法管不管用
  3. 大数据分析的作用与注意事项
  4. C函数改写成汇编语言函数,帮忙将一个C函数写成汇编语言
  5. python报表自动化系列 - 获取某月日历并以列表形式返回(公历)
  6. JAVA中整型常量的长度,Java基础入门篇(三)——Java常量、变量,
  7. 学习C++项目——一个基于C++11简单易用的轻量级网络编程框架 1
  8. html音乐静音代码,HTML Audio muted用法及代码示例
  9. 四种引用类型:强、软、弱、虚
  10. 香港城门隧道翻车意外酿一死16伤