zabbix监控服务部署

zabbix监控服务部署

1. zabbix介绍

Zabbix 能监控各种网络参数,保证服务器系统的安全运营;并提供灵活的通知机制以让系统管理员快速定位、解决存在的各种问题。是一个基于 Web 界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案。

1.1 zabbix的组件

zabbix主要有以下功能组件组成:

官方文档:https://www.zabbix.com/documentation/4.0/zh/manual/introduction/overview

Server

Zabbix server 是 Zabbix软件的核心组件,agent 向其报告可用性、系统完整性信息和统计信息。server也是存储所有配置信息、统计信息和操作信息的核心存储库。

Agent

Zabbix agents 部署在被监控目标上,用于主动监控本地资源和应用程序,并将收集的数据发送给 Zabbix server。

Proxy

Zabbix proxy 可以代替 Zabbix server采集性能和可用性数据。Zabbix proxy在Zabbix的部署是可选部分;但是proxy的部署可以很好的分担单个Zabbix server的负载。

数据库

​ 所有配置信息以及 Zabbix 采集到的数据都被存储在数据库中。

Web 界面

​ 该界面是 Zabbix server 的一部分,通常(但不一定)和 Zabbix server 运行在同一台物理机器上。

1.2 zabbix的进程

默认情况下 zabbix 包含6个进程:zabbix_agentd、zabbix_get、zabbix_proxy、zabbix_sender、zabbix_server,另外一个zabbix_java_gateway是可选的,这个需要单独安装。

zabbix_agentd

  客户端守护进程,此进程收集客户端数据,例如cpu负载、内存、硬盘使用情况等。

zabbix_get

  zabbix 工具,单独使用的命令,通常在 server 或者 proxy 端执行获取远程客户端信息的命令。通常用于排错。例如在 server 端获取不到客户端的内存数据,可以使用 zabbix_get 获取客户端的内容的方式来做故障排查。

zabbix_sender

  zabbix 工具,用于发送数据给 server 或者 proxy,通常用于耗时比较长的检查。很多检查非常耗时间,导致 zabbix 超时。于是在脚本执行完毕之后,使用 sender 主动提价数据。

zabbix_server

  zabbix 服务端守护进程。zabbix_agentd、zabbix_get、zabbix_sender、zabbix_proxy、zabbix_java_gateway的数据最终都是提交到server(说明:当然不是数据都是主动提交给zabbix_server,也有的是 server 主动去取数据)

zabbix_proxy

  zabbix 代理守护进程。功能类似server,唯一不同的是它只是一个中转站,它需要把收集到的数据提交/被提交到 server 里。

zabbix_java_gateway

  zabbix2.0之后引入的一个功能。顾名思义:Java网络,类似agentd,但是只用于 Java 方面。需要特别注意的是,它只能主动去获取数据,而不能被动获取数据。它的数据最终会给到 server 或者proxy。

1.3 zabbix常用术语

官方文档: https://www.zabbix.com/documentation/4.0/zh/manual/definitions

主机(host)

- 你想要监控的联网设备,有IP/DNS。

主机组(host group)

- 主机的逻辑组;可能包含主机和模板。一个主机组里的主机和模板之间并没有任何直接的关联。通常在给不同用户组的主机分配权限时候使用主机组。

监控项(item)

- 你想要从主机接收的特定数据,一个度量(metrics)/指标数据。

值预处理(value preprocessing)

- 存入数据库之前,转化/预处理接收到的指标数据

触发器(trigger)

- 触发器是一个逻辑表达式,用来定义问题阈值和“评估”监控项接收到的数据

当接收到的数据高于阈值时,触发器从“OK”变成“Problem”状态。当接收到的数据低于阈值时,触发器保留/返回“OK”的状态。

事件(event)

- 发生的需要注意的事件,例如触发器状态改变、自动发现/监控代理自动注册

事件标签(event tag)

- 提前设置的事件标记*,可以用于事件关联,权限细化设置等。

事件关联(event correlation)

- 自动灵活的、精确的关联问题和解决方案

比如说,你可以定义触发器A告警的异常可以由触发器B解决,触发器B可能采用完全不同的数据采集方式。

异常(problems)

- 处在“异常”状态的触发器

动作(action)

- 预先定义的应对事件的动作*

一个动作由操作(例如发出通知)和条件(什么时间进行操作)组成

媒介(media)

- 发送告警通知的方式、途径

告警通知(notification)

- 通过预先设定好的媒介途径发送事件信息给用户。

远程命令(remote command)

- 预定义好的,满足特定条件的情况下,可以在被监控主机上自动执行的命令。

模版(template)

- 被应用到一个或多个主机上的一整套实体组合(如监控项,触发器,图形,聚合图形,应用,LLD,Web场景等)。

模版的应用使得主机上的监控任务部署快捷方便;也可以使监控任务的批量修改更加简单。模版是直接关联到每台单独的主机上。

应用(application)

- 监控项的逻辑分组

Web场景(web scenario)

- 检查网站可浏览性的一个或多个HTTP请求

前端(frontend)

- Zabbix提供的web界面,5.0变成了ui

仪表板(dashboard)

- 自定义的web前端模块中,用于重要的概要和可视化信息展示的单元, 我们称之为组件(widget)。

组件(widget)

- Dashboard中用来展示某种信息和数据的可视化组件(概览、map、图表、时钟等)。

Zabbix API

- Zabbix API允许用户使用JSON RPC协议来创建、更新和获取Zabbix对象(如主机、监控项、图表等)信息或者执行任何其他的自定义的任务

Zabbix server

- Zabbix软件的核心进程,执行监控操作,与Zabbix proxies和Agents进行交互、触发器计算、发送告警通知;也是数据的中央存储库

Zabbix agent

- 部署在监控对象上的进程,能够主动监控本地资源和应用

Zabbix proxy

- 代替Zabbix Server采集数据,从而分担Zabbix Server负载的进程

加密(encryption)

- 使用TLS(Transport Layer Security )协议*支持Zabbix组建之间的加密通讯(server, proxy, agent, zabbix_sender 和 zabbix_get工具) 。

2. zabbix工作原理

监控系统运行的大概流程是这样的:

zabbix agent 需要安装到被监控的主机上,它负责定期收集各项数据,并发送到 zabbix server 端,zabbix server 将数据存储到数据库中,zabbix web 根据数据在前端进行展示和绘图。这里 agent 收集数据分为主动和被动两种模式:

主动:agent 请求server 获取主动的监控项列表,并主动将监控项内需要检测的数据提交给server / proxy

被动:server 向 agent 请求获取监控项的数据,agent 返回数据。

我们需要监控那些内容

硬件监控 温度,硬件故障等
系统监控 CPU, 内存,硬盘,网卡流量,TCP状态,进程数
应用监控 Nginx. Tomcat. PHP、 MySQL、 Redis等
日志监控 系统日志服务日志访问日志错误日志
安全监控 WAF,敏感文件监控
API监控 可用性,接口请求,响应时间
业务监控 例如电商网站,每分钟产生多少订单、注册多少用户、多少活跃用户、推广活动效果
流量分析 根据流量获取用户相关信息,例如用户地理位置、某页面访问状况、页面停留时间等

3. zabbix监控架构

在实际监控架构中,zabbix根据网络环境、监控规模等 分了三种架构:server-client、master-node-client、server-proxy-client 三种。

1、server-client 架构

  zabbix的最简单的架构,监控服务器和被监控机之间不经过任何代理,直接由 zabbix server 和 zabbix agentd之间进行数据交互。适用于网络比较简单,设备比较少的监控环境。

2、server-proxy-client 架构

  其中 proxy 是server、client 之间沟通的一个桥梁,proxy 本身没有前端,而且其本身并不存放数据,只是将 agentd 发来的数据暂时存放,而后再提交给server,该架构经常是和 master-node-client 架构做比较的架构,一般适用于跨机房、跨网络的中型网络架构的监控。

3、master-node-client 架构

  该架构是 zabbix 最复杂的监控架构,适用于跨网络、跨机房、设备较多的大环境。每个node 同时也是一个 server 端,node下面可以接 proxy,也可以直接接client。node有自己的配置文件和数据库,其要做的是将配置信息和监控数据向 master 同步,master 的故障或损坏不影响 node 其下的架构的完整性。

img

4. zabbix配置文件

zabbix配置文件种类:

  • 服务器端配置文件(/usr/local/etc/zabbix_server.conf)
  • 客户端配置文件(/usr/local/etc/zabbix_agentd.conf)
  • zabbix代理配置文件(/usr/local/etc/zabbix_proxy.conf)

服务器端配置文件zabbix_server.conf常用配置参数:

参数 作用
LogFile 设置服务端日志文件存放路径
ListenIP 设置服务端监听IP
ListenPort 设置服务端监听的端口号
PidFile 设置服务端进程号文件存放路径
DBHost 指定zabbix的数据库服务器IP
DBName 指定zabbix使用的数据库库名
DBUser 指定zabbix数据库登录用户
DBPassword 指定zabbix数据库登录密码
DBPort 指定zabbix数据库端口号
User 设置zabbix以什么用户的身份运行
AlertScriptsPath 设置告警脚本存放路径
ExternalScripts 外部脚本存放路径

客户端配置文件zabbix_agentd.conf常用配置参数:

参数 作用
Server 指定zabbix服务器的IP或域名
ServerActive 指定zabbix服务器的IP或域名
Hostname 指定本机的主机名,此项必须与web界面配置项一致
UnsafeUserParameters 是否启用自定义监控项,可选值为
UserParameter 指定自定义监控脚本参数
LogFile 设置客户端日志文件存放路径

zabbix代理配置文件zabbix_proxy.conf

参数 作用
ProxyMode Proxy工作模式,默认为主动模式,主动发送数据至Server
Server 指定Server端地址
ServerPort Server端PORT
Hostname Proxy端主机名
ListenPort Proxy端监听端口
DataSenderFrequency Proxy向Server发送数据的时间间隔

5. 部署zabbix5.0服务端

环境说明:

服务端IP 要安装的应用
192.168.32.140 lamp架构
zabbix server
zabbix agent

因为zabbix是用php语言开发的,所以必须先部署lamp架构,使其能够支持运行php网页

lamp架构部署 : https://www.cnblogs.com/shipment/p/13265611.html

zabbix5.0官方安装文档:https://www.zabbix.com/documentation/current/manual/installation/install

5.1 zabbix服务端安装

//安装依赖包
[root@localhost ~]# yum -y install net-snmp-devel libevent-devel
......

//下载zabbix
[root@localhost ~]# wget https://cdn.zabbix.com/zabbix/sources/stable/5.0/zabbix-5.0.2.tar.gz
......

//解压
[root@localhost ~]# tar xf zabbix-5.0.2.tar.gz 
[root@localhost ~]# cd zabbix-5.0.2
[root@localhost ~/zabbix-5.0.2]# ls
aclocal.m4  ChangeLog     config.sub    database  install-sh   man      README
AUTHORS     compile       configure     depcomp   m4           misc     sass
bin         conf          configure.ac  include   Makefile.am  missing  src
build       config.guess  COPYING       INSTALL   Makefile.in  NEWS     ui

//创建zabbix用户
[root@localhost ~/zabbix-5.0.2]# useradd -r -M -s /sbin/nologin zabbix
[root@localhost ~/zabbix-5.0.2]# id zabbix
uid=305(zabbix) gid=305(zabbix) groups=305(zabbix)

//配置zabbix数据库
[root@localhost ~/zabbix-5.0.2]# mysql -uroot -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.30 MySQL Community Server (GPL)

Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

#utf-8是Zabbix支持的唯一编码,要使Zabbix服务器/代理与MySQL数据库正常工作,需要字符集UTF 8和UTF 8_bin排序规则。
mysql> create database zabbix character set utf8 collate utf8_bin;
Query OK, 1 row affected (0.00 sec)

mysql>  grant all privileges on zabbix.* to zabbix@localhost identified by 'zabbix123!';
Query OK, 0 rows affected, 2 warnings (0.00 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

mysql> quit
Bye
[root@localhost ~/zabbix-5.0.2]# ls
aclocal.m4  ChangeLog     config.sub    database  install-sh   man      README
AUTHORS     compile       configure     depcomp   m4           misc     sass
bin         conf          configure.ac  include   Makefile.am  missing  src
build       config.guess  COPYING       INSTALL   Makefile.in  NEWS     ui
[root@localhost ~/zabbix-5.0.2]# cd database/mysql/
data.sql     double.sql   images.sql   Makefile.am  Makefile.in  schema.sql   
[root@localhost ~/zabbix-5.0.2]# cd database/mysql/
[root@localhost ~/zabbix-5.0.2/database/mysql]# mysql -uzabbix -pzabbix123! zabbix < schema.sql
mysql: [Warning] Using a password on the command line interface can be insecure.
[root@localhost ~/zabbix-5.0.2/database/mysql]# mysql -uzabbix -pzabbix123! zabbix < images.sql
mysql: [Warning] Using a password on the command line interface can be insecure.
[root@localhost ~/zabbix-5.0.2/database/mysql]# mysql -uzabbix -pzabbix123! zabbix < data.sql
mysql: [Warning] Using a password on the command line interface can be insecure.


//编译安装zabbix
[root@localhost ~/zabbix-5.0.2/database/mysql]# cd ../../
[root@localhost ~/zabbix-5.0.2]# ./configure --enable-server \
 --enable-agent \
 --with-mysql \
 --with-net-snmp \
 --with-libcurl \
 --with-libxml2
......

[root@localhost ~/zabbix-5.0.2]# make install

5.2 zabbix服务端配置

[root@localhost ~]# ls /usr/local/etc/
zabbix_agentd.conf  zabbix_agentd.conf.d  zabbix_server.conf  zabbix_server.conf.d

//修改服务端配置文件
//设置数据库信息
[root@localhost ~]# vim /usr/local/etc/zabbix_server.conf
....
DBPassword=zabbix123!       //设置zabbix数据库连接密码


//启动zabbix_server和zabbix_agentd
[root@localhost ~]# zabbix_server 
[root@localhost ~]# zabbix_agentd 
[root@localhost ~]# ss -tanl
State       Recv-Q Send-Q    Local Address:Port                   Peer Address:Port              
LISTEN      0      100           127.0.0.1:25                                *:*                  
LISTEN      0      128                   *:10050                             *:*                  
LISTEN      0      128                   *:10051                             *:*                  
LISTEN      0      128           127.0.0.1:9000                              *:*                  
LISTEN      0      128                   *:22                                *:*                  
LISTEN      0      100               [::1]:25                             [::]:*                  
LISTEN      0      80                 [::]:3306                           [::]:*                  
LISTEN      0      128                [::]:80                             [::]:*                  
LISTEN      0      128                [::]:22                             [::]:* 

//修改/etc/php.ini的配置并重启php-fpm
[root@localhost ~]# sed -ri 's/(post_max_size =).*/\1 16M/g' /etc/php.ini
[root@localhost ~]# sed -ri 's/(max_execution_time =).*/\1 300/g' /etc/php.ini
[root@localhost ~]# sed -ri 's/(max_input_time =).*/\1 300/g' /etc/php.ini
[root@localhost ~]# sed -i '/;date.timezone/a date.timezone = Asia/Shanghai' /etc/php.ini
[root@localhost ~]# service php-fpm restart
Gracefully shutting down php-fpm . done
Starting php-fpm  done

[root@localhost ~/zabbix-5.0.2]# ls
aclocal.m4  ChangeLog     config.log     configure.ac  include     Makefile     misc     sass
AUTHORS     compile       config.status  COPYING       INSTALL     Makefile.am  missing  src
bin         conf          config.sub     database      install-sh  Makefile.in  NEWS     ui
build       config.guess  configure      depcomp       m4          man          README
[root@localhost ~/zabbix-5.0.2]# cd ui/
[root@localhost ~/zabbix-5.0.2/ui]# mkdir /usr/local/apache/htdocs/zabbix
[root@localhost ~/zabbix-5.0.2/ui]# cp -a . /usr/local/apache/htdocs/zabbix
[root@localhost ~/zabbix-5.0.2/ui]# chown -R apache.apache /usr/local/apache/htdocs
[root@localhost ~/zabbix-5.0.2/ui]# ls /usr/local/apache/htdocs/zabbix/

//配置apache虚拟主机
[root@localhost ~]# vim /etc/httpd24/httpd.conf
//在配置文件的末尾加如下内容
<VirtualHost *:80>
    DocumentRoot "/usr/local/apache/htdocs/zabbix"
    ServerName www.test.com
    ProxyRequests Off
    ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/usr/local/apache/htdocs/zabbix/$1
    <Directory "/usr/local/apache/htdocs">
        Options none
        AllowOverride none
        Require all granted
    </Directory>
</VirtualHost>


//设置zabbix/conf目录的权限,让zabbix有权限生成配置文件zabbix.conf.php
[root@localhost ~]# chmod 777 /usr/local/apache/htdocs/zabbix/conf
[root@localhost ~]# ll -d /usr/local/apache/htdocs/zabbix/conf
drwxrwxrwx 3 1000 1000 94 Jul  6 05:54 /usr/local/apache/htdocs/zabbix/conf

//重启apache
[root@localhost ~/zabbix-5.0.2/ui]# apachectl restart
[root@localhost ~/zabbix-5.0.2/ui]# ss -tanl
State       Recv-Q Send-Q    Local Address:Port                   Peer Address:Port              
LISTEN      0      100           127.0.0.1:25                                *:*                  
LISTEN      0      128                   *:10050                             *:*                  
LISTEN      0      128                   *:10051                             *:*                  
LISTEN      0      128           127.0.0.1:9000                              *:*                  
LISTEN      0      128                   *:22                                *:*                  
LISTEN      0      100               [::1]:25                             [::]:*                  
LISTEN      0      80                 [::]:3306                           [::]:*                  
LISTEN      0      128                [::]:80                             [::]:*                  
LISTEN      0      128                [::]:22                             [::]:* 

//配置zabbix开机自启
[root@localhost ~/zabbix-5.0.2/misc/init.d/fedora/core]# pwd
/root/zabbix-5.0.2/misc/init.d/fedora/core
[root@localhost ~/zabbix-5.0.2/misc/init.d/fedora/core]# ls
zabbix_agentd  zabbix_server
//拷贝启动脚本(如果报错,就将启动脚本软连接到/usr/local/sbin/)
[root@localhost ~/zabbix-5.0.2/misc/init.d/fedora/core]# cp -a . /etc/init.d/
[root@localhost ~/zabbix-5.0.2/misc/init.d/fedora/core]# ls /etc/init.d/
functions  mysqld  netconsole  network  php-fpm  README  zabbix_agentd  zabbix_server

//添加开机自启
[root@localhost ~/zabbix-5.0.2/misc/init.d/fedora/core]# chkconfig --add zabbix_server 
[root@localhost ~/zabbix-5.0.2/misc/init.d/fedora/core]# chkconfig --add zabbix_agentd 
[root@localhost ~/zabbix-5.0.2/misc/init.d/fedora/core]# chkconfig zabbix_server on
[root@localhost ~/zabbix-5.0.2/misc/init.d/fedora/core]# chkconfig zabbix_agentd on
[root@localhost ~/zabbix-5.0.2/misc/init.d/fedora/core]# chkconfig --list

Note: This output shows SysV services only and does not include native
      systemd services. SysV configuration data might be overridden by native
      systemd configuration.

      If you want to list systemd services use 'systemctl list-unit-files'.
      To see services enabled on particular target use
      'systemctl list-dependencies [target]'.

mysqld         	0:off	1:off	2:on	3:on	4:on	5:on	6:off
netconsole     	0:off	1:off	2:off	3:off	4:off	5:off	6:off
network        	0:off	1:off	2:on	3:on	4:on	5:on	6:off
php-fpm        	0:off	1:off	2:on	3:on	4:on	5:on	6:off
zabbix_agentd  	0:off	1:off	2:on	3:on	4:on	5:on	6:off
zabbix_server  	0:off	1:off	2:on	3:on	4:on	5:on	6:off

5.3 zabbix web界面安装

  • 修改/etc/hosts文件(windows在 C:\Windows\System32\drivers\etc\hosts),添加域名与IP的映射
  • 在浏览器上访问域名,本文设置的域名为www.test.com,你需要修改成你自己的域名
  • 恢复zabbix/conf目录的权限为755

192.168.32.140 www.test.com

在浏览器上访问域名或ip进行安装:

image-20200715222210927

下一步

image-20200715222246494

下一步

image-20200715222544194

输入Zabbix服务器的name是可选的,但是如果提交,它将显示在菜单栏和页面标题中。

image-20200715223042762

image-20200715223202099

image-20200715223217870

恢复zabbix/conf目录的权限为755:

[root@localhost ~]# chmod 755 /usr/local/apache/htdocs/zabbix/conf
[root@localhost ~]# ll -d /usr/local/apache/htdocs/zabbix/conf
drwxr-xr-x 2 apache apache 104 Aug 17 13:05 /usr/local/apache/htdocs/zabbix/conf

5.4 zabbix 登录

zabbix默认登录用户名和密码:

用户名 密码
Admin zabbix

image-20200715223241291

image-20200715224325794

5.5 解决zabbix中文图形乱码问题

在C盘中搜索字体

我这里选择等线简体,复制到桌面,用Xftp工具上传到服务器

[root@localhost /usr/local/apache/htdocs/zabbix/assets/fonts]# ls
DejaVuSans.ttf  Deng.ttf
#备份原本的字体
[root@localhost /usr/local/apache/htdocs/zabbix/assets/fonts]# mv DejaVuSans.ttf DejaVuSans.ttf.back 
将新字体重命名为原字体的名字
[root@localhost /usr/local/apache/htdocs/zabbix/assets/fonts]# mv Deng.ttf DejaVuSans.ttf

刷新web端查看(如果有显示异常,重启zabbix_server后在查看)

切换会英文也没有显示问题

在切回中文

posted @ 2020-07-15 22:49  EverEternity  阅读(1062)  评论(0编辑  收藏  举报