小阿轩yx-Zabbix企业级分布式监控环境部署

小阿轩yx-Zabbix企业级分布式监控环境部署

前言

  • “运筹帷幄之中,决胜千里之外”
  • 监控在 IT 运维中占据着重要地位,按比例说占 30% 也不为过
  • 在监控系统开源软件中有很多可选择的工具,但是真正符合要求的、能够真正解决业务问题的监控系统软件却凤毛麟角

监控系统的功能概述

监控

有两个内容

  • 检测
  • 控制

重点在第一个字眼

  • 即检测、预防的意思

对应的英文单词

  • Monitoring

在计算机领域可以分为5种监控类型

  • 应用性能监控
  • 业务交易监控
  • 网络性能监控
  • 操作系统监控
  • 网络站点监控

上面5种类型将监控概念划分成了多个领域

通常所说的监控,都会模糊的包含以上5个细分领域

任何一个 IT 业务环境中,都会存在各种各样的硬件设备、软件应用等

按照逻辑层次可以将监控行为划分为5个层次

  • 基础设施监控
  • 系统层监控
  • 应用层监控
  • 业务监控
  • 端用户体验监控

最底层基础设施监控

  • 一般由运维人员负责
  • 涉及到的方面比较接近硬件体系

例如

  • 网络
  • 交换机
  • 路由器

这些设备的可靠性和稳定性直接影响到上层服务应用的稳定性,所以需要对网络流量、丢包情况、错包情况、连接数等等基础设施的核心指标进行监控

系统层监控

  • 这层涉及到方面和服务紧密相关

例如

  • 对 url 访问的性能
  • 访问的调用数
  • 访问的延迟
  • 对服务提供性能进行监控
  • 服务的错误率

同时对 sql 也需要进行监控,查看是否有慢 sql

  • 对于 cache 来说,需要监控缓存的命中率和性能,每个服务的响应时间等等

业务监控

具体指什么?

举个例子

一个典型的交易网站,需要关注用户登录情况、注册情况、下单情况、支付情况等等

这些直接影响到实际触发的业务交易情况

  • 可以提供给运营商和公司高管们需要关注的数据
  • 直接以数据支撑公司在战略层面的决策和方向

端用户体验监控

一个应用程序可能通过三种方式交付到用户手上

  • app
  • h5
  • pc端

用户通过浏览器、客户端打开连接到我们的服务

在用户端

  • 用户的体验怎么样?
  • 用户端性能怎么样?
  • 有没有产生错误等等?

监控系统的实现原理

模块组成

大体可以分为两部分

  • 数据采集部分
  • 数据存储、分析告警、展示部分

这两部分构成了监控系统的基本模型

采集协议

按照支持的协议方式,监控 IT 数据采集可以分为两种

  • 专用客户端采集
  • 公用协议采集

监控模式

监控系统数据采集可以分为

  • 被动模式
  • 主动模式

被动模式

  • 指的是服务器端到客户端采集数据

主动模式

  • 客户端主动上报数据到服务器

一般来说

  • 被动模式对监控端服务器的开销较大,适合小规模的监控环境
  • 被动模式对监控端服务器的开销较小,适合大规模的监控环境

代理架构

对于大规模的监控环境

  • 被监控节点较多
  • 并且监控类型也很多
  • 监控产生的数据和网络连接开销非常大

数据采集方式除了使用主动模式之外,还需要使用代理的架构

通过代理架构分摊服务器端的性能开销

代理架构还支持跨地域、跨网络的分布式监控

常见的代理架构

  • C/S/P架构(即 Client/Proxy/Server)

监控系统的开源产品

zabbix

  • 是一款出色的企业级运维监控平台
  • 可用于监控从服务器、网络设备到 Web 应用程序和数据库的性能和可用性的一切
  • 可以安装在 Linux、AIX、Windows、Solaris、MacOS X、FreeBSD、OpenBSD等系统上使用,具有非常良好的适配能力

Prometheus+Grafana

  • 是一个开源系统监控和警报工具包
  • 主要用于对基础设施的监控

包括

  • 服务器(CPU、MEM等)
  • 数据库(MYSQL、PostgreSQL等)
  • Web服务等

几乎所有东西都可以通过 Prometheus 进行监控

Cacti

  • 是一款网络流量检测图形工具
  • 连接到 RRDTool,生成与网络数据相关的图标,具有非常强大的数据用户管理功能
  • 可以指定每一个用户能查看树状结构、host 以及任何一张图
  • 还可以与 LDAP 结合进行用户验证,同时也能自己增加模版

Nagios

  • 是一个监控系统运行状态和网络信息的监控系统
  • 它可以监控所指定的本地或远程主机以及服务,同时提供异常通知功能等
  • 能够监控几乎所有类型的组件
  • 网络协议
  • 操作系统
  • 系统指标
  • 应用程序
  • 服务
  • web 服务器
  • 网站
  • 中间件等

Checkmk

  • 是一个高度可扩展的监控工具
  • 可监控服务器、网络、云资产、数据库、容器、物联网等

它有两种模式可用

  • 基础版完全开源并提供免费和无限制的监控
  • 企业版附带附加功能

Checkmk 具有部署快、高度自动化、配置灵活的特点。

OpenNMS

  • 是一个企业级基于 Java/XML 的分布式网络和系统监控管理平台。
  • 它能够显示网络中各中终端和服务器的状态和配置,为管理网络提供有效的信息。
  • 它专为Linux 设计,但也支持 windows、Solaris 和OSX。

OpenNMS 可以使用 JMX、WMI、SNMP、NRPE、XML HTTP、JDBC、XML、JSON 等收集系统指标。

Netdata

  • 是一款 Linux 性能实时监测工具
  • 它可以为 Linux 系统、应用程序、SNMP 服务等提供实时的性能监测
  • 目前在物理系统、虚拟机、容器和物联网/边缘设备上运行

特点

  • 监控指标多而广
  • 数据收集速度快

可以同时并发监控数万个指标,交互式可视化和富有洞察力的健康警报,可以即时诊断基础架构中的异常情况。

Zabbix 系统概述

初识 Zabbix

  • 由 Alexei Vladishev 创建
  • 目前由 Zabbix SIA 主导开发和支持
  • 使用灵活的通知机制,允许用户为几乎任何事件配置基于电子邮件的告警以实现对服务器问题做出快速反应。
  • 基于存储的数据提供出色的报告和数据可视化功能。这使得 Zabbix 成为容量规划的理想选择。
  • 支持轮询和 trapping
  • 所有 Zabbix 报告和统计数据以及配置参数都可以通过基于 Web 的前端访问
  • 基于 Web 的前端确保可以从任何位置评估网络状态和服务器的健康状况

如果配置得当,不管对于拥有少量服务器的小型组织还是拥有大量服务器的大公司来讲,Zabbix 都可以在监控 IT 基础设施方面发挥重要作用

  • 是免费的
  • 是在 GPL 通用公共许可证第2版下编写和分发的。意味着它的源代码是免费分发的,可供公众使用 

Zabbix 是什么?

  • 是一种企业级的分布式开源监控系统的解决方案
  • 是一个基于 web 界面的提供分布式系统监控,以及网络监控功能的企业级开源解决方案。
  • 是一款监控网络的众多参数以及服务器、虚拟机、应用程序、服务、数据库、网站、云等的健康和完整性的软件。

Zabbix 的功能特性

数据采集
  • 可用性及性能检测
  • 支持 SNMP(trapping 及 polling)、IPMI、JMX 监控
  • 自定义检测
  • 自定义间隔收集数据
  • 三种角色
  • Server
  • Proxy
  • Agent
灵活的阈值定义
  • 允许灵活地自定义问题阀值,在 zabbix 中称为触发器(trigger),存储在后端数据库中。
高级告警配置
  • 可以自定义告警升级(escalation)、接收者及告警方式
  • 告警信息可以配置,并允许使用宏(macro)变量
  • 通过远程命令实行自动化动作(action)
实施绘图
  • 通过内置的绘图方法实现监控数据实时绘图。
扩展的图形化显示
  • 允许自定义创建多监控项视图
  • 生成网络拓扑(network maps)
  • 自定义的面板(screen)和 slide shows,并允许在 dashboard 页面显示
  • 生成监控报告
历史数据存储
  • 数据存储在数据库中;
  • 历史数据可配置;
  • 内置数据清理机制。
配置简单
  • 一次配置,终生监控,除非调整或删除
  • 允许使用模板添加监控设备
模板使用
  • 模板中可以添加组监控;
  • 模板允许继承。
网络自动发现
  • 自动发现网络设备;
  • Agent 自动注册;
  • 自动发现文件系统、网卡设备、SNMP OID 等。
快速的 Web 接口
  • Web 前端采用 PHP 编写;
  • 访问无障碍。
Zabbix API
  • 提供程序级别的访问接口,第三方程序可以很快接入。
权限系统
  • 安全的权限认证;
  • 用户可以限制允许维护的列表。
安全特性、Agent 易扩展
  • 在监控目标上部署;
  • 支持 Linux 及 Windows。
二进制守护进程
  • C 语言开发,高性能,低内存消耗;
  • 易移植。
具备应对复杂环境情况
  • 通过 Zabbix Proxy 可以非常容易的创建远程监控。

Zabbix 角色及架构

Zabbix server
  • 是 Zabbix 服务端守护进程。
  • Zabbix Agentd、Zabbix Proxy 的数据最终都是提交到 Server。
  • 当然,并不是所有数据都主动提交给 Zabbix Server,也有的是 Server 主动获取数据。
Zabbix Agent
  • 是客户端守护进程,此进程主要用于收集客户端数据
  • 例如 CPU 负载、内存、硬盘使用情况等。
Zabbix Proxy
  • 是 Zabbix 代理守护进程,功能类似 Server。

不同的是

  • zabbix_proxy 只是一个中转站,它需要把收集到的数据提交/被提交到 Server。
Zabbix Web
  • 管理员通过 web 界面管理 zabbix 配置以及査看 zabbix 相关监控信息,通常与 zabbix server 运行在同一台主机上,也可以单独部署在独立的服务器上。
Zabbix 整体架构

实验拓扑结构

设备列表

设备主机名IP 地址系统软件
zabbix serverZBX192.168.10.108CentOS7.9zabbix server 6.4.8
zabbix proxyproxy192.168.10.107CentOS7.9zabbix proxy 6.4.8
zabbix agentserver01192.168.10.101CentOS7.9zabbix agent 6.4.8
zabbix agentserver01192.168.10.102CentOS7.9zabbix agent 6.4.8

拓扑结构

LNMP 环境的搭建

(在 server 主机上)

修改主机名称

[root@localhost ~]# hostnamectl set-hostname ZBX
[root@localhost ~]# bash

配置 yum 仓库

下载阿里的仓库文件

[root@zbx]# rm -rf /etc/yum.repos.d/*
[root@zbx]# curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
[root@zbx]# curl -o /etc/yum.repos.d/epel.repo https://mirrors.aliyun.com/repo/epel-7.repo
[root@zbx]# yum clean all

安装 php7 的仓库

[root@zbx]# yum -y install http://rpms.remirepo.net/enterprise/remi-release-7.rpm

生成 mariadb10.11 的仓库文件

[root@zbx]# vim /etc/yum.repos.d/mariadb.repo
[mariadb]
name=mariadb
baseurl=https://mirrors.aliyun.com/mariadb/yum/10.11/centos/7/x86_64/
gpgcheck=0

清空 yum 缓存

[root@zbx]# yum clean all

安装 php7.4 和 nginx

[root@zbx]# yum install -y --enablerepo=remi --enablerepo=remi-php74 mod_php php-gd* php php-opcache php-mbstring  php-mysqlnd php-phpunit-PHPUnit php-pecl-xdebug php-pecl-xhprof php-fpm php-devel php-bcmath php-ldap gcc* libxml2-devel net-snmp net-snmp-devel libevent-devel curl-devel 

安装 mariadb-10.11

[root@zbx]# yum -y install mariadb-server mariadb-devel nginx

zabbix6.4.8 需要的各个平台软件的版本

  • mysql 的版本要求 8.0.30-8.1.x
  • mariadb 的版本要求 10.5.00-11.1.x
  • nginx 的版本要求 1.20 or later
  • php 的版本要求 7.4.0-8.2.x

关闭防火墙和内核机制并设置永久关闭

[root@zbx]# systemctl stop firewalld
[root@zbx]# systemctl disable firewalld
[root@zbx]# setenforce 0
[root@zbx]# vim /etc/sysconfig/selinux
#修改前
SELINUX=enforcing
#修改后
SELINUX=disabled

配置 nginx

进入 nginx 目录

[root@zbx]# cd /etc/nginx

生成 nginx 配置文件

[root@zbx nginx]# cp nginx.conf nginx.conf.bak
[root@zbx nginx]# rm -rf nginx.conf
[root@zbx nginx]# cp nginx.conf.default nginx.conf

修改 nginx 配置文件

[root@zbx nginx]# vim nginx.conf
server {listen         80;server_name    localhost;#charset koi8-r;#access log logs/host.access.logmain;location /{root    /WWW ;index index.html index.htm index.php;}location ~\.php${root             /WWW;fastcgi_pass     127.0.0.1:9000;fastcgi_index    index.php;fastcgi_param    SCRIPT_FILENAME /scripts$fastcgi_script_name;include          fastcgi.conf;}
}

修改以下配置

  • location / {
  •         root        /www;
  •         index        index.html index.htm index.php;
  • }
  • location ~ \.php$ {
  •         root        /www;
  •         include        fastcgi.conf;

启动服务

[root@zbx nginx]# systemctl start nginx
[root@zbx nginx]# systemctl enable nginx
[root@zbx nginx]# systemctl start php-fpm
[root@zbx nginx]# systemctl enable php-fpm
[root@zbx nginx]# systemctl start mariadb
[root@zbx nginx]# systemctl enable mariadb

设置数据库密码

[root@zbx nginx]# mysqladmin -u root password 'pwd123'

创建一个文件

[root@zbx nginx]# mkdir /www

测试 LNMP 环境

[root@zbx nginx]# vim /www/test.php
<?php
$link=mysqli_connect('127.0.0.1','root','pwd123');
if($link) echo "恭喜你,数据库连接成功啦!!";
mysqli_close($link);
?>

修改 php.ini

[root@zbx nginx]# vim /etc/php.ini
##388 行,最长执行时间是 30 秒,数值0表示没有##执行时间的限制,你的程序需要跑多久便跑多久
max_execution_time =300
##398 行,以秒为单位设定了脚本接收输入的最大时间
max_input_time = 300
##923行
date.timezone =Asia/Shanghai
##694,服务器可以接收的最大 POST 数据大小
post_max_size = 16M
##1205,所有 bcmath 函数中十进制数字的数目
bcmath.scale =1

添加一个用户

[root@zbx nginx]# useradd -M -s /sbin/nologin zabbix

修改 php-fpm

[root@zbx nginx]# vim /etc/php-fpm.d/www.conf
user=zabbix
group=zabbix

重启服务

[root@zbx nginx]# systemctl restart php-fpm

zabbix 的安装与配置(在 server 主机上)

创建 zabbix 数据库

[root@zbx]# mysql -uroot -ppwd123
##导入数据
MariaDB [(none)]> create database zabbix character set utf8 collate utf8 bin;
MariaDB [(none)]> create database zabbix_proxy character set utf8 collate utf8 bin;
MariaDB [(none)]> grant all privileges on zabbix.* to zabbix@'%' identified by 'zabbix';
MariaDB [(none)]> grant all privileges on zabbix.* to zabbix@'localhost' identified by 'zabbix';
MariaDB [(none)]> grant all privileges on zabbix_proxy.* To 'zabbix'@'localhost' identified BYzabbix';
MariaDB [(none)]> grant all privileges on zabbix_proxy.* To 'zabbix'@'%' identified By 'zabbix';

解压 zabbix 源码包

[root@zbx]# tar zxvf zabbix-6.4.8.tar.gz

进入目录

[root@zbx]# cd zabbix-6.4.8/database/mysql/

导入 zabbix 数据

[root@zbx mysql]# mysql -uzabbix -pzabbix zabbix <schema.sql
[root@zbx mysql]# mysql -uzabbix -pzabbix zabbix <images.sql
[root@zbx mysql]# mysql -uzabbix -pzabbix zabbix <data.sql
[root@zbx mysql]# mysql -uzabbix -pzabbix zabbix_proxy <schema.sql
  • 如果需要运行zabbix server,需要导入 schema.sql、images.sql、data.sql 这三个文件到zabbix数据库
  • 如果需要运行zabbix agent,需要导入schema.sql 到zabbix_proxy 数据库。

zabbix 的安装与配置

进入 zabbix 目录

[root@zbx]# cdc /root/zabbix-6.4.8

源码安装 zabbix

[root@zbx zabbix-6.4.8]# ./configure --prefix=/usr/local/zabbix/ --enable-server --enable-agent --with-mysql --with-libcurl --with-libxml2 --with-net-snmp --with-unixODBC --with-zabbix-get

编译

[root@zbx zabbix-6.4.8]# make
[root@zbx zabbix-6.4.8]# make install
  • --prefix=/usr/local/zabbix:指定zabbix安装路径
  • --enable-server:启动server端
  • --enable-agent:启动agent端
  • --with-mysql:编译连接mysql 相关依赖包
  • --with-libcurl:启动curl相关,对SMTP身份验证
  • --with-libxml2:启动 xml 相关,提供对 XML 文档的各种操作
  • --with-net-snmp:启动 snmp 相关,用于 snmp 监控设备,支持 snmp 协议
  • --with-unixodbc:启动 odbc 相关用于监控数据库
  • --with-zabbix-get:zabbix_get 是一种命令行的应用
  • --enable-java:启动 java-agent 用于监控 java 类,需要安装 JAVA 环境
  • --enable-ipv6:启用IPv6
  • --with-libcurl 和 --with-libxml2 配置选项对虚拟机监控是必须的

优化命令路径

[root@zbx zabbix-6.4.8]# ln -s /usr/local/zabbix/sbin/* /usr/local/sbin/
[root@zbx zabbix-6.4.8]# ln -s /usr/local/zabbix/bin/* /usr/local/bin/

切换目录找到 core

[root@zbx zabbix-6.4.8]# cd /root/zabbix-6.4.8/misc/init.d/fedora/core

拷贝文件到指定目录

[root@zbx zabbix-6.4.8]# cp zabbix_agentd /etc/init.d/
[root@zbx zabbix-6.4.8]# cp zabbix_server /etc/init.d/

切换至 init.d 目录下

[root@zbx zabbix-6.4.8]# cd /etc/init.d/

服务控制脚本的优化

[root@zbx init.d]# vim zabbix_agentd
BASEDIR=/usr/local/zabbix
[root@zbx init.d]# vim zabbix_server
BASEDIR=/usr/local/zabbix

切换目录至 /etc 下

[root@zbx init.d]# cd /usr/local/zabbix/etc

修改 zabbix 服务端参数

[root@zbx etc]# vim zabbix_server.conf
LogFile=/tmp/zabbix server.log
#单位M,47行
LogFilesize=1024
#数据库主机名 87行
DBHost=localhost
#数据库中库名 99行
DBName=zabbix
#数据库用户名 115行
DBUser=zabbix
#数据库用户密码 123行
DBPassword=zabbix
##超时时间,秒 465行
Timeout=10
#根据内存情况尽量调大 402行
Cachesize=256M
#根据内存情况尽量调大 427行
HistoryCachesize=256M
TrendcacheSize=256M
ValueCacheSize=256M
StartTrappers=30
# agent 端的数量
StartPollers=10

修改 zabbix 代理参数

[root@zbx etc]# vim zabbix_agentd.conf
##113行
Server=127.0.0.1
##167行
ServerActive=127.0.0.1
##178行
Hostname=Zabbix server
  • 利用HostnameItem 可以动态获取主机的名称。
  • 如果配置 HostnameItem=system.hostname 而未配置 Hostname=xxx 参数,那么在web 监控页面显示的主机的可见名称为客户端主机的主机名(即通过 hostname 命令得到的结果)
  • 如果配置 Hostname=xxx而末 HostnameItem=system.hostname 参数,那么在web 监控页面显示的主机的可见名称为 xxx
  • 如果未配置 HostnameItem=system.hostname 和 Hostname=xxx 这两个参数,那么在web 监控页面显示的主机的可见名称为 客户端主机的主机名(即通过 hostname 命令得到的结果)
  • 如果同时配置 HostnameItem=system.hostname 和 Hostname=xxx 参数,那么在web 监控页面显示的主机的可见名称为 xxx(即以配置文件中的Hostname 定义的为准)
  • 要对一大批主机进行自动配置时,这里就可以使用HostnameItem ,所有的主机都使用一个模板进行批量部署,就避免了每台主机再去单独设置hostname 的麻烦

找到 ui 并切换至该目录下

[root@zbx etc]# cd /root/zabbix-6.4.8/ui

拷贝 zabbix 网站程序到 httpd 的网站根目录下

[root@zbx ui]# cp -rf * /www

提升权限并退出

[root@zbx ui]# chown -R zabbix:zabbix /www
[root@zbx ui]# cd

添加两个服务

[root@zbx ~]# chkconfig --add zabbix_agentd
[root@zbx ~]# chkconfig --add zabbix_server
[root@zbx ~]# chkconfig zabbix_agentd on
[root@zbx ~]# chkconfig zabbix_server on

启动 zabbix

[root@zbx ~]# systemctl start zabbix_agentd
[root@zbx ~]# systemctl enable zabbix_agentd
[root@zbx ~]# systemctl start zabbix_server
[root@zbx ~]# systemctl enable zabbix_server

查看进程

[root@zbx ~]# netstat -anpt | grep zabbix
tcp    0 0.0.0.0:10050    0.0.0.0:*    LISTEN    15295/zabbix agentd
tcp    0 0.0.0.0:10051    0.0.0.0:*    LISTEN    15340/zabbix server

zabbix 初始配置

登录 zabbix

  • http://192.168.10.108/index.php

设置语言

检查环境

  • 要求所有必要条件都是“OK”的提示

填写数据库信息

主机名设置(保持默认即可,不用填写)

安装前信息汇总,确认无误,即可点击下一步

确认安装完成并点击完成

登录页面

  • 默认账号:Admin(第一个字母大写)
  • 默认密码:zabbix

登录后的界面

安装 Zabbix Agent(在 agnet 主机 server01 上)

修改主机名

[root@localhost ~]# hostnamectl set-hostname server01
[root@localhost ~]# bash

关闭防火墙、内核机制

[root@server01 ~]# systemctl stop firewalld
[root@server01 ~]# setenforce 0

用 rpm 安装软件包

[root@server01 ~]# rpm -ivh pcre2-10.23-2.el7.x86_64.rpm
[root@server01 ~]# rpm -ivh zabbix-agent-6.4.8-release2.el7.x86_64.rpm

修改 zabbix_agentd.conf 配置文件

[root@server01 ~]# vim /etc/zabbix/zabbix_agentd.conf
##指向 Proxy 地址,也可以直接指向 server 端
Server=192.168.10.108
##指向 Proxy 地址,也可以直接指向 server 端
ServerActive=192.168.10.108
##Agent 本地名称,需要与将来在 Server 端的 Web 页面上的主机名称一致,名称自定义
Hostname=server01

启动服务

[root@server01 ~]# systemctl start zabbix-agent
[root@server01 ~]# systemctl enable zabbix-agent
  • Server:被动模式,允许指定的服务器连接本机获取采集的数据
  • ServerActive:此参数为主动模式需要设置的,主动提交采集数据给指定的服务器,此处可以注释掉,如果要开启主动模式,则开启

zabbix server 上添加主机

添加 agent 主机

  • 数据采集 -- > 主机 -- > 创建主机

添加完成的状态

  • 主机列表中的 Availability(可用性)列包括了每个接口的主机的可用性指标,如果定义了主机的zabbix agent 接口,可以通过 ZBX 选项了解主机的可用性。
  • ZBX为灰色代表未建立主机连接,未进行数据的采集
  • ZBX为绿色代表主机可用,zabbixagent检查成功
  • ZBX为红色代表主机不可用,zabbix agent 检查失败 

使用zabbix agent 接口,需要为主机添加 zabbix agent 的监控模板

查看图像信息

  • 检测 --> 主机 --> 图像

解决图像中文乱码

  • 可以直接执行(4)(5)两步

查找 zabbix 定义了字体的 php 文件

[root@zbx ~]# find / -name defines.inc.php
/root/zabbix-6.4.8/ui/include/defines.inc.php
/www/include/defines.inc.php
  • /www 是本案中 zabbix 的前端位置,不同的安装者,此位置可能不同

查看 zabbix 字体文件中用的字体

[root@zbx ~]# grep "ZBX_FONTPATH" /www/include/defines.inc.php
define('ZBX_FONTPATH',    realpath('assets/fonts')); //where to search for font (GD > 2.0.18)
[root@zbx ~]# grep "ZBX_FONTPATH_NAME" /www/include/defines.inc.php
define('ZBX_FONTPATH_NAME',    'DejaVuSans'); //font file name

查找 zabbix 的字体文件位置

[root@zbx ~]# find / -name DejaVuSans.ttf
/root/zabbix6.4.8/ui/assets/fonts/DejaVuSans.ttf
/usr/share/fonts/dejavu/DejaVuSans.ttf
/www/assets/fonts/DejaVuSans.ttf

在 windows 系统中找一个 ttf 或 ttc 格式的字体

  • 位置在 C:\Windows\Fonts

将选择的字体文件上传到 /www/assets/fonts 目录下

  • 例如此处选择 msyhl.ttc(微软雅黑)
[root@zbx ~]# cd /www/assets/fonts

链接该字体

[root@zbx fonts]# ln -snf msyhl.ttc DejaVuSans.ttf
  • -s        --symbolic 比较容易,有 -s 时表示创建软连接,没有 -s 时,表示创建硬链接
  • -f         --force 强行删除任何已存在的目标文件
  • -n        --no-dereference 把符号连接的目的目录视为一般文件

刷新页面观察效果

proxy 端的安装(在 proxy 主机上 107)

修改主机名

[root@localhost ~]# hostnamectl set-hostname proxy
[root@localhost ~]# bash

关闭防火墙、内核机制

[root@proxy]# systemctl stop firewalld
[root@proxy]# systemctl disable firewalld
[root@proxy]# setenforce 0
[root@proxy]# vim /etc/sysconfig/selinux
#修改前
SELINUX=enforcing
#修改后
SELINUX=disabled

设置 yum 仓库

[root@proxy]# rm -rf /etc/yum.repos.d/*
[root@proxy]# curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
[root@proxy]# curl -o /etc/yum.repos.d/epel.repo https://mirrors.aliyun.com/repo/epel-7.repo
[root@proxy]# yum clean all

安装依赖包

[root@proxy]# yum -y install gcc libxml2-devel unixoDBc-devel net-snmp-devel libcurl-devel libssh2-devel OpenIPMI-devel openssl-devel openldap-devel libevent libevent-devel

解压 zabbix 源码包

[root@proxy]# tar zxvf zabbix-6.4.8.tar.gz

进入目录

[root@proxy]# cd zabbix-6.4.8

 安装所需配置依赖

[root@zbx zabbix-6.4.8]# ./configure --prefix=/usr/local/zabbix/ --enable-proxy --with-mysql --with-net-snmp --with-libcurl --with-libxml2 --with-unixODBC

编译

[root@zbx zabbix-6.4.8]# make
[root@zbx zabbix-6.4.8]# make install

修改配置文件

[root@zbx zabbix-6.4.8]# vim /usr/local/zabbix/etc/zabbix_proxy.conf
##13行
ProxyMode=0
##32行
Server=192.168.10.108
##42
Hostname=Zabbix_proxy
##58行
ListenPort=10051
LogFile=/tmp/zabbix_proxy.log
LogFilesize=0
PidFile=/tmp/zabbix_proxy.pid
SocketDir=/tmp
##151
DBHost=192.168.10.108
##167
DBName=zabbix_proxy
##182
DBUser=zabbix
##190行
DBPassword=zabbix
  • ##13行
  • ProxyMode=0
  • ##32行
  • Server=192.168.10.108
  • ##42
  • Hostname=Zabbix_proxy
  • ##58行
  • ListenPort=10051
  • ##151
  • DBHost=192.168.10.108
  • ##167
  • DBName=zabbix_proxy
  • ##182
  • DBUser=zabbix
  • ##190行
  • DBPassword=zabbix

添加用户

[root@zbx zabbix-6.4.8]# useradd -M -s /sbin/nologin zabbix

启动

[root@zbx zabbix-6.4.8]# /usr/local/zabbix/sbin/zaabbix_proxy

查看进程

[root@zbx zabbix-6.4.8]# netstat -anpt | grep zabbix_proxy

在 web 管理界面上添加 proxy 主机

  • 管理 --> Proxy > 创建 agent 代理
  • 选择主动模式(默认)

设置 agent 端 server02 主机配置文件

修改主机名

[root@localhost ~]# hostnamectl set-hostname server02
[root@localhost ~]# bash

关闭防火墙、内核机制

[root@server02]# systemctl stop firewalld
[root@server02]# systemctl disable firewalld
[root@server02]# setenforce 0
[root@server02]# vim /etc/sysconfig/selinux
#修改前
SELINUX=enforcing
#修改后
SELINUX=disabled

安装 rpm 包

[root@server02 ~]# rpm -ivh pcre2-10.23-2.el7.x86_64.rpm
[root@server02 ~]# rpm -ivh zabbix-agent-6.4.8-release2.el7.x86_64.rpm

修改配置文件

[root@server02 ~]# vim /etc/zabbix/zazbbix_agent.conf
##修改 Server 的值
Server=192.168.10.107
ServerActive=192.168.107
Hostname=server02
  • 将 Server 的地址修改为 proxy 主机的主机

重启服务

[root@server02 ~]# systemctl restart zaabbix-agent

在 web 管理界面添加 proxy 代理的 agent 主机

 查看 web 面板监控到的主机数据

  • 如果ZBX 不会变绿,就重启proxy 进程

[root@server02]# pkill -9 zabbix_proxy

[root@server02]# /usr/local/zabbix/sbin/zabbix_proxy

[root@server02]# netstat -anpt | grep zabbix_proxy

小阿轩yx-Zabbix企业级分布式监控环境部署


http://www.ppmy.cn/news/1524596.html

相关文章

如何阅读PyTorch文档及常见PyTorch错误

如何阅读PyTorch文档及常见PyTorch错误 文章目录 如何阅读PyTorch文档及常见PyTorch错误阅读PyTorch文档示例常见Pytorch错误Tensor在不同设备上维度不匹配cuda内存不足张量类型不匹配 参考 PyTorch文档查看https://pytorch.org/docs/stable/ torch.nn -> 定义神经网络 torc…

【C++】auto的解释

auto 是 C 中的类型推断关键字。它让编译器自动推导变量的类型。使用 auto 可以使代码更简洁&#xff0c;尤其在处理复杂类型时特别有用。 auto 提高了代码的灵活性和可读性&#xff0c;特别是在类型复杂或需要保持一致性的情况下。 主要用法&#xff1a; 1.自动推导类型: …

手写call、apply、bind

一、手写call const person {name:zhangsan} function foo(numA,numB){console.log(this)console.log(numA,numB)return numA numB }// 手写call Function.prototype.mycall function(thisArg,...args){ // 手写callconst key Symbol(key) // 唯一标识符thisArg[key] thi…

小程序的右侧抽屉开关动画手写效果

<template><view><button click"openDrawer">打开抽屉</button><view v-if"showDrawer" class"drawer" :style"{ backgroundColor: bgColor }" click"closeDrawer"><view class"draw…

docker 重启容器且修改服务映射端口

要重启 Docker 容器并修改服务的映射端口,可以按照以下步骤进行操作: 1. 停止当前运行的容器 如果你想重新配置端口,通常需要先停止当前运行的容器。你可以使用以下命令停止容器: docker stop <container_name_or_id>2. 删除现有容器 为了修改端口映射,你需要删…

AI应用 | 超好玩的“汉语新解“ - 文末有Prompt

最近群里玩“汉语新解”的文字卡片贼多 感觉很新颖 本来AI是无法生成固定的图的 但是使用html格式&#xff0c;来生成固定图片的想法还是很不错的 看看效果 使用很简单 把提示词喂给Ai即可 随便一个大模型都可以&#xff0c;比如ChatGPT、通义千问、kimi等等 提示词(Prompt)如下…

关于linux里的df命令以及inode、数据块-stat链接数以及关于awk文本处理命令中内置函数sub、gsub、sprintf

一、关于linux里的df命令以及inode、数据块-stat链接数 Linux中df命令用于显示目前在Linux系统上的文件系统的磁盘使用情况统计&#xff0c;平常这个命令也用得很多&#xff0c;但一般就是使用df -h查看各个分区的空间使用情况&#xff0c;除此外也可以使用df查看当前linux系统…

多张GPU卡

from transformers import pipeline from accelerate import init_empty_weights, infer_auto_device_map from transformers import AutoModelForCausalLM, AutoTokenizer 初始化加速器 from accelerate import Accelerator accelerator Accelerator() 加载模型和 tokeni…

OpenCVSharp直方图和傅里叶变换介绍

文章目录 1. 直方图计算2. 傅里叶变换3. 直方图均衡化4. 傅里叶逆变换5. 直方图匹配1. 直方图计算 直方图是图像处理中常用的工具,用于表示图像中像素值的分布情况。OpenCVSharp 提供了 Cv2.CalcHist 方法来计算图像的直方图。 详细介绍   直方图计算可以帮助我们了解图像的…

菜鸟入门Docker

初始Docker Docker的概念 Docker的用途 DOcke的安装 Docker架构 配置Docker镜像加速器 Docker常用命令 Docker服务相关的命令。 Docker镜像相关的命令 Docker容器相关的命令 容器的数据卷 数据卷的概念和作用 配置数据卷 Docker应用部署 Docker部署mysql Docker…

Java怎么把多个对象的list的数据合并

1.示例一&#xff1a;创建几个包含Person对象的List&#xff0c;并将它们合并成一个新的List 在Java中&#xff0c;将多个对象的List合并通常涉及到遍历这些List并将它们的元素添加到一个新的List中。这里&#xff0c;我将给出一个详细的代码示例&#xff0c;该示例将展示如何…

项目管理:如何确保目标的实现?

李华作为项目经理&#xff0c;正引领团队研发一款的智能系统。面对项目的复杂性和紧迫性&#xff0c;李华决定引入进度猫这一项目管理工具&#xff0c;以确保项目目标的顺利实现。 1、明确目标与愿景 在项目启动之初&#xff0c;李华组织了一次全面的项目规划会议。 会上&am…

React 项目中使用 axios 进行 HTTP 请求时,封装 get、put、post 等请求方法

在 React 项目中使用 axios 进行 HTTP 请求时&#xff0c;你可以封装 get、put、post 等请求方法&#xff0c;使代码更简洁、复用性更高。尤其是对于 GET 请求&#xff0c;需要将对象参数解析并拼接到 URL 中。 以下是封装 axios 请求的一个简单示例&#xff0c;包括如何处理 …

laravel 11 区分多模块的token

数据表&#xff1a;用户表&#xff08;users&#xff09;、管理员表&#xff08;admin_user&#xff09;&#xff0c; 配置bootstrap/app.php guards > [web > [driver > session,provider > admin_users,],home > [driver > sanctum,provider > users,]…

Sentence-BERT实现文本匹配【CoSENT损失】

引言 还是基于Sentence-BERT架构&#xff0c;或者说Bi-Encoder架构&#xff0c;但是本文使用的是苏神提出的CoSENT损失函数1。 点击来都是缘分&#xff0c;之前过时的方法可以不细看&#xff0c;别的文章可以不收藏&#xff0c;现在是最流行的方法&#xff0c;这篇文章建议收藏…

App推广新姿势:Xinstall带你玩转安装页面拉起功能!

在移动互联网时代&#xff0c;App已经成为我们生活中不可或缺的一部分。然而&#xff0c;随着App数量的不断增加&#xff0c;如何让自己的App在众多竞争者中脱颖而出&#xff0c;成为推广者面临的一大难题。今天&#xff0c;我们就来聊聊一个神奇的解决方案——Xinstall&#x…

项目日志——日志器模块一部缓冲区的设计、实现、测试

文章目录 异步缓冲区模块模块设计缓冲区设计单个缓冲区 实现测试 异步缓冲区模块 模块设计 异步日志器的思想是为了避免业务线程因为写日志的过程时间较长而长时间阻塞 异步日志器的工作就是把业务输出的日志内容放入内存缓冲区中&#xff0c;使用专门的线程进行日志写入 这…

C2免杀--手工shellcode编译,shellcode免杀思路

前言 欢迎来到我的博客 个人主页:北岭敲键盘的荒漠猫-CSDN博客 本文主要整理C2免杀中 shellcode代码免杀的相关部分 shellcode概念 我们也不啰嗦&#xff0c;我直接直观的描述一下他。 他就是一串机器能运行的代码&#xff0c;但是他不是正统的python&#xff0c;c&#xff…

vulhub spring 远程命令执行漏洞(CVE-2022-22963)

1.打开环境 进入环境所在的文件夹 docker-compose up -d 一键启动容器 2.浏览器访问环境 3.抓包 http://192.168.10.233:8080/functionRouter进行抓包 抓包修改请求方式 4.修改请求体内容 spring.cloud.function.routing-expression: T(java.lang.Runtime).getRuntime().e…

C++内存布局

文章目录 C内存布局1.文字介绍2.图片介绍3.代码介绍 C内存布局 1.文字介绍 1.内核态空间 2.用户态空间 (1)栈区&#xff1a;存储局部变量和函数调用的相关信息&#xff0c;栈的特点是自动分配和释放&#xff0c;由操作系统管理。栈由高地址向低地址生长&#xff0c;通常为0x…