Zabbix监控系统(1)zabbix服务部署

Zabbix介绍和架构

为什么需要监控

运维行业有句话:"无监控、不运维",监控俗称"第三只眼"。没了监控,什么基础运维,业务运维都是"瞎子"。所以说监控是运维这个职业的根本。尤其是在现在有人说运维是背锅侠,那么,有了监控,有了充足的数据,一切以数据说话,运维还需要背锅吗,所以作为一个运维工程师,如何构建一套监控系统是你的第一件工作。

监控功能

  • 在需要的时刻,提前预警即将出问题,避免故障发生
  • 实时监控系统和业务,当出问题之后,通过发出告警,提醒相关人员,快速可以找到问题的根源,从而及时处理问题
  • 可以实现网站,应用或者服务器的故障自愈, 保证高可用性
  • 以图形或易观察的方式呈现当前以及过往的状态,便于分析和预测系统发展趋势

需要监控什么

监控一切需要监控的资源,包括:服务器,网络设备,业务应用,云服务等

分类 实例内容
硬件监控 通过远程控制卡: DeLL的iDRAC,HP的ILO和IBM的IMM等 使用IPMI来完成物理设备的监控工作。通常必须要监控包括温度、硬盘故障等 路由器,交换机(端口,光衰,日志),打印机等
系统监控 cpu, 内存, 硬盘使用率, 硬盘IO, 系统负载,进程数
服务监控 nginx,apache, php-fpm,mysql.memcache,redis ,tomcat,JVM,TCP连接数
性能监控 网站性能,服务器性能,数据库性能,存储性能
日志监控 系统会产生系统日志,应用程序会有应用的访问日志、错误日志,服务有运行日志等, 可以使用ELK来进行日志监控
安全监控 用户登录数,passwd文件变化,本地所有文件改动 Nginx+Lua编写一个WAF通过kibana可以图形化的展示不同的攻击类型的统计。
网络监控 IP,端口,URL,DB,ping包,IDC带宽网络流量,网络流出速率,网络入流量, 网络出流是.网络使用率,SMTP.POP3

常见的监控工具

开源监控软件:cacti、nagios、zabbix、smokeping、open-falcon等

Zabbix使用场景及系统概述

Zabbix介绍

Zabbix是一个企业级解决方案,支持实时监控数千台服务器,虚拟机和网络设备,采集百万级监控指标,适用于任何IT基础架构、服务、应用程序和资源的解决方案

Zabbix功能

Zabbix 是一个高度成熟完善的网络监控解决方案,包含了多种功能

官方链接:

www.zabbix.com/documentati...

数据收集:

  • 历史数据, 即记录每个监控项采集到的每个监控值
  • 趋势数据, 主要保留某个监控项一个小时内历史数据的最大值、最小值和平均值以及该监控项一个小时内所采集到的数据个数
  • 可用性和性能检查;
  • 支持 SNMP(包括主动轮询和被动捕获)、IPMI、JMX、VMware 监控; agent
  • 自定义检查;
  • 按照自定义的时间间隔采集需要的数据;
  • 通过 Server/Proxy 和 Agents 来执行数据采集。

灵活的阈值定义

  • 您可以参考后端数据库定义非常灵活的告警阈值,即触发器

高度可配置化的告警

  • 可以根据递增计划、接收者、媒介类型自定义发送告警通知;
  • 使用宏变量可以使告警通知变得更加高效有用;
  • 自动操作包含远程执行命令。

实时图形

  • 使用内置图形功能可以将监控项实时绘制成图形。

Web 监控功能

  • Zabbix可以追踪模拟鼠标在 Web 网站上的点击操作,来检查 Web 网站的功能和响应时间。

丰富的可视化选项

  • 可以组合多个监控项到单个视图中,创建自定义图表;
  • 网络拓扑图;
  • 以仪表盘样式展示自定义聚合图形和幻灯片演示;报表;
  • 监控资源的更高层次展示视图(业务视图)。

历史数据存储

  • 存储在数据库中的数据;
  • 历史配置;内置数据管理机制

配置简单

  • 将被监控设备添加为主机;
  • 主机一旦添加到数据库中,就会采集数据用于监控;
  • 将模板用于监控设备。

使用模板

  • 模板中分组检查;
  • 模板可以关联模板,继承已关联模板的属性。

网络发现客户端

  • 自动发现网络设备;
  • Zabbix Agent 发现设备后自动注册;
  • 自动发现文件系统、网络接口

快捷的 Web 界面

  • 基于 PHP 的 Web 前端;
  • 可以从任何地方访问;
  • 您可以定制自己的操作方式;
  • 您可以通过审计日志来查看你的操作

Zabbix API

  • Zabbix API 为 Zabbix 提供可编程接口,用于批量操作、第三方软件集成和其他用途

权限管理系统

  • 安全的用户身份验证;
  • 指定的用户只能查看指定的权限范围内的视图

功能强大且易于扩展的 Zabbix Agent

  • 部署于被监控对象上;
  • 支持 Linux 和 Windows ;

二进制守护进程

  • 为了更好的性能和更少的内存占用,采用 C 语言编写;
  • 便于移植。

适应更复杂的环境

  • 使用 Zabbix Proxy 代理,可以轻松实现分布式远程监控

Zabbix架构

Zabbix 由如下主要的功能组件组成

  • SERVER

    • Zabbix server 是 Zabbix 软件的核心组件
    • Zabbix Agent 向其报告可用性、系统完整性信息和统计信息。
    • Zabbix server也是存储所有配置信息、统计信息和操作信息的核心存储库。
    • Zabbix server也是Zabbix监控系统的告警中心。在监控的系统中出现任何异常,将发出通知给管理员。
  • 基本的 Zabbix Server 的功能分解成为三个不同的组件。他们是:Zabbix server、Web前端和数据库。

tips:

Zabbix 的所有配置信息都存储在 Server和Web前端进行交互的数据库中。例如,当你通过Web前端(或者API)新增一个监控项时,它会被添加到数据库的监控项表里。然后,Zabbix server 以每分钟一次的频率查询监控项表中的有效项,接着将它存储在 Zabbix server 中的缓存里。这就是为什么 Zabbix前端所做的任何更改需要花费两分钟左右才能显示在最新的数据段的原因。

  • 数据库

    • 所有配置信息以及 Zabbix 采集到的数据都被持久存储在数据库中
    • 可以支持MySQL,PostgreSQL,Oracle 等多种数据库
  • WEB 界面

    • WEB 界面是 Zabbix server 的一部分,用于实现展示和配置的界面通常(但不一定)和 Zabbix server 运行在同一台物理机器上基于 Apache(Nginx)+PHP 实现,早期只支持LAMP架构,从Zabbix5.0开始支持LNMP
  • AGENT

    • Zabbix agents 部署在被监控目标上,用于主动监控本地资源和应用程序,并将收集的数据发送给Zabbix server。从Zabbix5.0开始支技Zabbix Agent2
  • PROXY

    • Zabbix Proxy 可以代替 Zabbix Server 采集性能和可用性数据
    • Zabbix Proxy 在 Zabbix 的部署是可选部分
    • Zabbix Proxy 的部署可以很好的分担单个Zabbix server的负载
  • Java 网关

    • Zabbix 要监控 tomcat 服务器和其它JAVA程序,需要使用 Java gateway 做为代理,才能从JAVA程序中获取数据

Zabbix术语

  • 被监控: 即 Zabbix 监控的主机或设备

  • 监控项item:即 Zabbix 监控的相关指标,比如:CPU利用率,内存使用率,TCP连接数等

    • 监控内容
  • 应用集Application:为方便管理众多的监控项,可将多个同类型的监控项进行归类,纳入一个集合中,即应用集

  • 触发器Trigger:是一个表达式,或者说一个条件,如磁盘利用率超过80%等,当触发条件后,会导致一个触发事件,这个事件会执行一个或多个动作

  • 告警:当触发器和动作二者结合起来时,就构成了的告警机制,比如cpu的使用率达到80%以上,触发了报警动作,系统将自动发送一封邮件到指定的邮箱。然后运维可以及时的去处理此错误 host---> items---> triggers --> action

  • Web 监测:对WEB服务进行检测,比如:访问指定网站是否可正常访问

  • 模板 Template: 可以方便地应用于多个主机的一组实体的集合。而这些实体包括:

    • items(监控项)
    • applications(应用集)
    • triggers(触发器)
    • graphs(图形)
    • screens (聚合图形,自Zabbix 2.0起)

使用模板是减少工作量并简化Zabbix配置的好方法。

模板分为内置模板和自定义模板

部署安装zabbix

去往官网选择安装版本

www.zabbix.com/cn

Zabbix Server 安装方法介绍

Zabbix Server 提供了三种安装方法

  • 二进制包安装: 官方提供了二进制包安装的方法,可以支持CentOS和Debian/Ubuntu的安装
  • 源码编译安装: 部署繁琐,生产环境定制安装可以使用
  • 基于容器安装: 测试环境使用,参考链接如下

编译安装

解决依赖关系

yum install gcc libxml2-devel   net-snmp net-snmp-devel   curl curl-devel php php-bcmath php-mbstring mariadb mariadb-devel    libevent-devel    java-1.8.0-openjdk-devel  -y 

建立管理用户

groupadd zabbix
useradd -g zabbix zabbix

解压包

bash 复制代码
cd /opt
#切换目录

tar xf zabbix-6.4.17.tar.gz
#解压

编译安装

css 复制代码
./configure --help
#可以查看帮助
./configure --prefix=/apps/zabbix_server --enable-server --enable-agent --with-mysql --with-net-snmp --with-libcurl --with-libxml2 --enable-java

make 
make install

添加客户端(用于自我监控)

bash 复制代码
./configure --prefix=/apps/zabbix --enable-agent
在别的机器上   客户机需要安装的  客户端

安装数据库

sql 复制代码
yum install mariadb-server.x86_64  -y
systemctl start mariadb

mysql_secure_installation       安全加固脚本
#输入当前密码
#修改root密码
#移除匿名用户 
#移除测试数据库
#不让 root  远程登录
#刷新


mysql -uroot -p
create database zabbix character set utf8 collate utf8_bin;
create user zabbix@localhost identified by 'zabbix';
grant all privileges on zabbix.* to zabbix@localhost;
set global log_bin_trust_function_creators = 1;
quit;

导入zabbix数据库文件

bash 复制代码
cd /opt/zabbix-6.4.17/database/mysql/

mysql -uzabbix -pzabbix zabbix < schema.sql
mysql -uzabbix -pzabbix zabbix < images.sql
mysql -uzabbix -pzabbix zabbix < data.sql

###必须最后 导入  data.sql

部署 Nginx + PHP 环境并测试

安装 nginx

yum install -y nginx

修改 nginx 配置

ini 复制代码
vim /etc/nginx/conf.d/zbx.conf
server {
  listen 80;
  server_name zbx.hzw.com;
  root /var/www/zbx;
  
  location / {
    index index.php;
  }
  
  location ~ \.php$ {
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME /var/www/zbx$fastcgi_script_name;
    include fastcgi_params;
  }
}
如果请求的路径是以`.php`结尾的,则会通过FastCGI进程执行对应的PHP文件。
根目录为`/var/www/zbx`,默认的索引文件为`index.php`。

安装php,修改配置文件

bash 复制代码
#更换为阿里源 
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

#安装依赖环境 
yum install -y epel-release

yum install https://rpms.remirepo.net/enterprise/remi-release-7.rpm

yum install php74 php74-cli php74-fpm php74-mysqlnd php74-gd php74-mbstring php74-xml php74-pear php74-bcmath php74-json php74-redis

zabbix6.4版本要求PHP版本最低为7.4,否则无法正常安装zabbix web前端程序

如果出现Minimum required PHP version is 7.4.0的字样,说明PHP版本过低

最好在安装完PHP后使用yum -y update来更新一下yum仓库,该操作会顺带更新PHP版本至最新

修改 php 配置

ini 复制代码
vim /etc/php-fpm.d/www.conf 
user = nginx
#第8行
group = nginx
#第10行
ini 复制代码
vim /etc/php.ini

max_execution_time = 300		        # 368行
max_input_time = 600			# 378行
post_max_size = 80M			# 656行
date.timezone = Asia/Shanghai	        # 877行

1. 最大执行时间(max_execution_time):您可以在第 368 行找到这个选项。默认情况下,它被设置为 300 秒(5 分钟)。您可以根据您的需求将其修改为更长的时间。

2. 最大输入时间(max_input_time):这个选项位于第 378 行。它控制从服务器接收到客户端请求开始计时的时间。默认值为 600 秒(10 分钟)。如果您需要更长的时间来处理请求,请相应地修改这个值。

3. 最大 POST 数据大小(post_max_size):在第 656 行,您可以找到这个选项。默认情况下,它被设置为 80M。您可以根据您的需要将其调整为更大或更小的值。

4. 日期时区(date.timezone):在第 877 行,您可以找到这个选项。默认情况下,它被设置为 "Asia/Shanghai",表示使用上海的时区。如果您希望使用其他时区,请将其更改为相应的时区。

测试

php 复制代码
#创建目录和测试文件 
mkdir -p /var/www/zbx 

vim /var/www/zbx/index.php 
<?php
phpinfo(); 
?> 

#启动服务 
systemctl enable --now nginx php-fpm

测试访问(hosts解析) 修改 C:\Windows\System32\drivers\etc\hosts

浏览器访问:zbx.hzw.com/index.php

部署数据库

要求 MySQL 5.7 或 Mariadb 10.5 及以上版本

安装Mariadb

ini 复制代码
#配置 Mariadb yum源
cat > /etc/yum.repos.d/mariadb.repo << EOF
[mariadb]
name = MariaDB
baseurl = http://mirrors.aliyun.com/mariadb/yum/10.5/centos7-amd64/
gpgkey = http://mirrors.aliyun.com/mariadb/yum/RPM-GPG-KEY-MariaDB
gpgcheck = 1
enabled=1
EOF

yum install -y mariadb-server mariadb

systemctl enable --now mariadb

初始化数据库并以root用户登录

shell 复制代码
mysql_secure_installation
分别输入 回车 -> n -> Y (设置root密码,如abc123) -> 后面一路 Y

#"mysql_secure_installation" 是一个用于设置和加固 MySQL 安装的脚本工具
#提示您输入数据库的 root 用户密码。如果尚未设置密码,则按回车键留空。
#询问您是否需要更改 root 密码。根据需求选择 Y 或 N。
#提示您删除匿名用户。如果不希望数据库中存在匿名用户,选择 Y。
# 提示您禁用 root 远程登录。如果不希望 root 用户能够通过远程连接访问数据库,选择 Y。
#提示您删除测试数据库。如果不需要默认的测试数据库,选择 Y。
#提示您重新加载权限表以使更改生效。选择 Y 来重新加载权限表。
mysql -u root -pabc123

创建数据库并指定字符集

sql 复制代码
create database zabbix character set utf8 collate utf8_bin;

创建 zabbix 数据库用户并授权

csharp 复制代码
grant all on zabbix.* to 'zabbix'@'localhost' identified by 'zabbix';
grant all on zabbix.* to 'zabbix'@'%' identified by 'zabbix';
flush privileges;

准备zabbix源码包并解压

bash 复制代码
#上传源码包 zabbix-6.4.17.tar.gz 到 /opt 目录
cd /opt
tar xf zabbix-6.4.17.tar.gz

ls /opt/zabbix-6.4.17/database/mysql

#data.sql:这个文件包含了 Zabbix 数据库的实际数据,包括监控项、触发器、历史数据等。

# double.sql:这个文件包含了用于移除重复数据的 SQL 查询语句。

#history_pk_prepare.sql:这个文件包含了用于优化历史数据表的 SQL 查询语句。

#images.sql:这个文件包含了用于存储和管理图像数据的 SQL 查询语句。

#Makefile.am 和 Makefile.in:这两个文件是用于构建 Zabbix 数据库的 Makefile 配置文件。

#schema.sql:这个文件包含了 Zabbix 数据库的表结构、索引、键等定义。这是创建和初始化整个数据库的主要文件。

按照顺序向数据库导入 zabbix 数据

bash 复制代码
cd /opt/zabbix-6.4.17/database/mysql

mysql -uroot -pabc123 zabbix < schema.sql
mysql -uroot -pabc123 zabbix < images.sql
mysql -uroot -pabc123 zabbix < data.sql

编译安装zabbix Server 服务端

安装依赖包,创建 zabbix 用户

bash 复制代码
#依赖包
yum install -y mysql-devel pcre-devel openssl-devel zlib-devel libxml2-devel net-snmp-devel net-snmp libssh2-devel OpenIPMI-devel libevent-devel openldap-devel libcurl-devel fping gcc gcc-c++ make

#用户
useradd -s /sbin/nologin -M zabbix

编译安装

css 复制代码
#编译安装
cd /opt/zabbix-6.4.17/

./configure \
--sysconfdir=/etc/zabbix/ \
--enable-server \
--with-mysql \
--with-net-snmp \
--with-libxml2 \
--with-ssh2 \
--with-openipmi \
--with-zlib \
--with-libpthread \
--with-libevent \
--with-openssl \
--with-ldap \
--with-libcurl \
--with-libpcre
bash 复制代码
make install 
#安装zabbix

修改配置文件

ini 复制代码
#修改 zabbix server 配置文件,修改数据库的密码
vim /etc/zabbix/zabbix_server.conf 
......
LogFile=/var/log/zabbix_server.log
# 38行,指定 zabbix 日志路径
DBPassword=zabbix					# 123行,指定 zabbix 数据库的密码

添加到系统服务中

ini 复制代码
#准备 systemctl 服务管理文件
cat > /usr/lib/systemd/system/zabbix-server.service << EOF
[Unit]
Description=Zabbix Server with MySQL DB
After=syslog.target network.target mysqld.service

[Service]
Type=simple
ExecStart=/usr/local/sbin/zabbix_server -f
User=zabbix

[Install]
WantedBy=multi-user.target
EOF
bash 复制代码
#修改日志文件的属主属组为zabbix ,如果出现文件不存在的提示,可以手动创建该日志文件
chown zabbix:zabbix /var/log/zabbix_server.log 


systemctl daemon-reload 
systemctl start zabbix-server
perl 复制代码
ss -lntp | grep 10051

效果测试(部署 Web 前端,进行访问)

bash 复制代码
cp -r /opt/zabbix-6.4.17/ui/* /var/www/zbx 

chown -R nginx.nginx /var/www/zbx

浏览器访问:zbx.hzw.com/

scss 复制代码
[Default language] 
选择 Chinese(zh_CN),点击下一步 

[必要条件检测] 
确认无误后,点击下一步
csharp 复制代码
[Settings] 
主机名称设为 Zabbix-监控 
默认时区选择 Asia/Shanghai 
点击下一步

默认的登录账号和密码为:Admin/zabbix

添加 zabbix 客户端主机

安装zabbix-agent2

bash 复制代码
rpm -Uvh https://repo.zabbix.com/zabbix/6.4/rhel/7/x86_64/zabbix-release-6.4-1.el7.noarch.rpm

yum install zabbix-agent2 zabbix-agent2-plugin-*

yum install -y zabbix-agent2

systemctl restart zabbix-agent2

systemctl enable zabbix-agent2

服务端和客户端设置时间同步

yum install -y ntpdate 

ntpdate -u ntp.aliyun.com

服务端客户端都设置域名映射

bash 复制代码
cat > /etc/hosts << EOF 
192.168.137.101 zbx-server 
192.168.137.102 zbx-agent01 
EOF

修改agent2的配置文件,启动服务

ini 复制代码
vim /etc/zabbix/zabbix_agent2.conf
......
Server=192.168.137.101	
#80行,指定 zabbix 服务端的 IP 地址
ServerActive=192.168.137.101	
#133行,指定 zabbix 服务端的 IP 地址
Hostname=zbx-agent01			
#144行,指定当前 zabbix 客户端的主机名

#启动 zabbix-agent2
systemctl start zabbix-agent2
systemctl enable zabbix-agent2
perl 复制代码
ss -natp | grep zabbix

服务端验证 zabbix-agent2 的连通性

ini 复制代码
yum install -y zabbix-get
#`zabbix_get` 是 Zabbix 命令行工具,用于从 Zabbix Agent 获取监控数据。


#常用的键值
agent.ping						
#服务端与客户端是否连通,返回1表示可达,返回非表示不可达
system.hostname					
#系统主机名
agent.hostname
#客户端主机名
net.if.in[if,<mode>]
#网络接口进入的流量统计,if表示网卡名称,带<>的参数表示可以省略
net.if.out[if,<mode>]
#网络接口流出的流量统计
proc.num[<name>,<user>,<state>,<cmdline>,<zone>]
#进程数
net.tcp.port[<ip>,port]			
#检查是否能建立tcp连接到指定端口,返回0表示不能连接,返回1表示可以连接
go 复制代码
zabbix_get -s '192.168.137.102' -p 10050 -k 'agent.ping'


`agent.ping` 是 Zabbix Agent 提供的内置键之一,用于检查 Agent 的可用性。
当 Zabbix Server 发送 `agent.ping` 请求时
如果 Agent 正常工作,它将返回 "1" 表示活动
如果 Agent 不可用,则返回 "0" 表示不活动。

在 Web 页面中添加 agent 主机

csharp 复制代码
【主机名称】输入 zbx-agent011372.102
【模板】搜索 Linux ,选择 Linux by Zabbix agent
【群组】选择 Linux servers
【Interfaces】点击添加 客户端
【IP地址】输入 192.168.137.102

解决 zabbix-server Web页面中文乱码问题

解决方法

bash 复制代码
#zabbix-server安装
yum install -y wqy-microhei-fonts

\cp -f /usr/share/fonts/wqy-microhei/wqy-microhei.ttc /var/www/zbx/assets/fonts/DejaVuSans.ttf

刷新浏览器页面
相关推荐
weixin_307779135 小时前
在AWS上使用Flume搜集分布在不同EC2实例上的应用程序日志具体流程和代码
python·flask·云计算·flume·aws
Linux运维老纪9 小时前
K8s之Service详解(Detailed Explanation of K8s Service)
服务器·网络·云原生·容器·kubernetes·云计算·运维开发
weixin_307779139 小时前
AWS EMR使用Apache Kylin快速分析大数据
大数据·数据仓库·云计算·aws·kylin
weixin_3077791312 小时前
AWS EMR上的Spark日志实时搜索关键指标网页呈现的设计和实现
大数据·python·spark·云计算·aws
佛州小李哥1 天前
通过亚马逊云科技Bedrock打造自定义AI智能体Agent(上)
人工智能·科技·ai·语言模型·云计算·aws·亚马逊云科技
Linux运维老纪1 天前
DNS缓存详解(DNS Cache Detailed Explanation)
计算机网络·缓存·云原生·容器·kubernetes·云计算·运维开发
ivwdcwso1 天前
云计算部署模式全面解析
云计算
.生产的驴2 天前
MYSQL 商城系统设计 商品数据表的设计 商品 商品类别 商品选项卡 多表查询
数据库·mysql·搜索引擎·性能优化·云计算·状态模式·多分类
weixin_307779132 天前
PyDeequ库在AWS EMR启动集群中数据质量检查功能的配置方法和实现代码
大数据·python·spark·云计算·aws
会敲代码的Steve2 天前
本地Harbor仓库搭建流程
运维·分布式·云计算