实验用到的安装包附上
链接:https://pan.baidu.com/s/14–Cy3ibGwupgmbnDZEdRg
提取码:ugyk

常见监控平台

Cacti

在这里插入图片描述
cacti官网
软件设计目标: 流量与性能监测为主
数据展示平台: B/S
数据收集方式: SNMP(Simple Network Management Protocol)

组件说明

Cacti是用php语言实现的一个软件,它的主要功能是用snmp服务获取数据,然后用rrdtool储存和更新数据,当用户需要查看数据的时候用rrdtool生成图表呈现给用户。因此,snmp和rrdtool是cacti的关键。
组合框架: LAP
数据收集: SNMP
绘制图形: RRDtool

1)SNMP

(简单网络管理协议)用于收集设备内部发生的数据,如负载、磁盘状态、带宽之类
收集数据展示图
在这里插入图片描述

2)RRDtool

RRDtool 是开源行业标准,高性能的时间序列数据记录和绘图系统。RRDtool 可以很容易 地集成到 shell脚本、perl、python、ruby、lua 或 tcl 应用程序中
工作架构
C/S:收集数据
B/S:监控数据
在这里插入图片描述
过程:首先通过LAMP平台部署Cacti监控工具,之后通过客户端的web登录Cacti进行对其他客户端的设置,可以从上图看到Cacti采集数据时必须要使用SNMP协议来连接客户端进而能够采集数据,也就是说客户端必须支持SNMP协议,监控之后通过RRDtool来生成图表。

Cacti监控组件安装配置

环境准备:
10.10.10.11 Cacti服务端
10.10.10.12 客户端(被监控)

安装环境(10.10.10.11)

[root@localhost ~]$ mount -t iso9660 /dev/cdrom /mnt/cdrom #挂载本地yum光盘
[root@localhost ~]$ yum -y install httpd mysql mysql-server mysql-devel libxml2-devel mysql-connector-odbc perl-DBD-MySQL unixODBC php php-mysql php-pdo # 安装基础环境 LAMP 
[root@localhost ~]$ service httpd start && chkconfig httpd on# 启动 Apache 
[root@localhost ~]$ service mysqld start && chkconfig mysqld on# 启动 MySQL
[root@localhost ~]$ mysqladmin -uroot password root #设置mysql密码
 [root@localhost ~]$ yum -y install net-snmp net-snmp-utils net-snmp-libs lm_sensors # 安装 SNMP、主板信息监控 所需软件包

安装 rrdtool (10.10.10.11)

#上传cacti.iso
[root@localhost ~]$ yum -y install lrzsz #方便把软件直接拖到xshell里面
[root@localhost ~]$ mkdir /iso
[root@localhost ~]$ mount -o loop cacti.iso /iso
[root@localhost ~]$ cp -a /iso/* .
[root@localhost ~]$ tar -zxf rrdtool-1.4.5.tar.gz && cd rrdtool-1.4.5 # 源码编译安装 RRDTOOL 
[root@localhost ~]$ ./configure --prefix=/usr/local 
#如出错,按以下步骤解决,解决源码编译报错依赖
#第 1 步
[root@localhost ~]$ cd /root && tar zxvf cgilib-0.5.tar.gz && cd cgilib-0.5 && make 
[root@localhost ~]$ cp libcgi.a /usr/local/lib  && cp cgi.h /usr/include 
#第 2 步
[root@localhost ~]$ yum -y install libart_lgpl-devel pango-devel* cairo-devel*
#重新执行./configure
[root@localhost ~]$ cd /root/rrdtool-1.4.5
[root@localhost ~]$ ./configure --prefix=/usr/local 
[root@localhost ~]$ make && make install 

部署 cacti,设置数据库连接 (10.10.10.11)

[root@localhost ~]$ cd /root/cacti
[root@localhost ~]$ tar -zxf cacti-0.8.7g.tar.gz # 解压 Cacti 网站 
[root@localhost ~]$ mv cacti-0.8.7g/ /var/www/html/cacti # 拷贝至 Apache 默认路径
# 为 Cacti 代码进行补丁更新
[root@localhost ~]$ cd /var/www/html/cacti 
[root@localhost ~]$ patch -p1 -N < /root/cacti/data_source_deactivate.patch 
[root@localhost ~]$ patch -p1 -N < /root/cacti/graph_list_view.patch 
[root@localhost ~]$ patch -p1 -N < /root/cacti/html_output.patch 
[root@localhost ~]$ patch -p1 -N < /root/cacti/ldap_group_authenication.patch 
[root@localhost ~]$ patch -p1 -N < /root/cacti/script_server_command_line_parse.patch 
[root@localhost ~]$ patch -p1 -N < /root/cacti/ping.patch 
[root@localhost ~]$ patch -p1 -N < /root/cacti/poller_interval.patch

添加检测数据的用户账户,更改权限,保证读写数据正常

[root@localhost ~]$ cd /var/www/html/cacti 
[root@localhost ~]$ useradd runct # 添加 runct 用户,用于 RRDTOOL 运行 
[root@localhost ~]$ chown -R root.root ./ 
[root@localhost ~]$ chown -R runct.runct rra/ log/

授权数据库用户,导入初始化数据

[root@localhost ~]$ mysql -u root -proot 
mysql> create database cactidb default character set utf8; # 创建 cactidb 数据库 
mysql> grant all on cactidb.* to 'cactiuser'@'localhost' identified by 'pwd@123'; # 把 cactiuser 用 户赋予 cactidb 库的所有权限 
mysql> quit 
[root@localhost ~]$ mysql -uroot -p cactidb < cacti.sql # cacti 数据库还原

修改 cacti 配置文件

[root@localhost ~]$ vim include/config.php # 配置 cacti 页面连接数据库的认证信息 
/* make sure these values refect your actual database/host/user/password */
$database_type = "mysql";
$database_default = "cactidb";
$database_hostname = "localhost";
$database_username = "cactiuser";
$database_password = "pwd@123";
$database_port = "3306";

调整 http 配置

[root@localhost ~]$ vim /etc/httpd/conf/httpd.conf # 配置 Apache 对 cacti 的用户权限
Listen 80
Listen 80 DocumentRoot "/var/www/html/cacti" #默认网站路径
<Directory "/var/www/html/cacti">
	options None 
	AllowOverride None 
	Order allow,deny 
	Allow from al
</Directory>
DirectoryIndex index.php index.html  #默认主页
AddDefaultCharset utf-8 #默认字符集
[root@localhost ~]$ service httpd restart

测试:浏览器输入10.10.10.11访问,账户名:admin 密码:admin

客户端配置 (10.10.10.12)

[root@localhost ~]$ mount -t iso9660 /dev/cdrom /mnt/cdrom #挂载本地yum光盘
[root@localhost ~]$ yum -y install net-snmp net-snmp-utils lm_sensors # 安装 SNMP、主板信息监控所需软件包 
[root@localhost ~]$ vim /etc/snmp/snmpd.conf
#41服务器地址 默认为 default 共同体名称 默认为 public 
#62开放所有的 SNMP 查询权限 all 默认为 SystemView 
#       group          context sec.model sec.level prefix read   write  notif
access  notConfigGroup ""      any       noauth    exact  all none none
view all    included  .1                               80
# 85支持各种查询与访问 取消注释符号
[root@localhost ~]$ service snmpd start && chkconfig snmpd on

收集数据 (10.10.10.11)

[root@localhost ~]$ su - runct
[root@localhost ~]$ snmpwalk -v 2c -c public 10.10.10.12 tcp
[root@localhost ~]$ php /var/www/html/cacti/poller.php # 生成对应的监控图表
[root@localhost ~]$ crontab -e 
*/5 * * * * /usr/bin/php /var/www/html/cacti/poller.php &>/dev/null # 配置 RRDTOOL 的轮训任务 
[root@localhost ~]$ service crond start
exit

Nagios

Nagios是一款开源的免费网络监视工具,能有效监控Windows、Linux和Unix的主机状态,交换机路由器等网络设备,打印机等。在系统或服务状态异常时发出邮件或短信报警第一时间通知网站运维人员,在状态恢复后发出正常的邮件或短信通知。
在这里插入图片描述

老牌监控服务器 Cacti – Nagios 对比

Cacti
收集数据、图形展示
偏重网络流量
SNMP、OID、SNMP Agent
优点能够查看过去的图形数据,缺点服务器状态需要人为判断

Nagios
偏重主机、服务的状态
Agent
脚本
优点是能实时查看服务器状态,缺点无法追溯过去的服务器数据
nagios的四种监控状态
Nagios可以识别四种状态返回信息。
(OK)表示状态正常(绿色显示)
(WARNING)表示出现警告(×××),
(CRITICAL)表示出现非常严重错误(红色),
(UNKNOWN)表示未知错误(深×××),nagios根据插件返回来的值来判断监控对象的状态,并通过web显示出来,以供管理员即时发现故障。

Nagios 监控对象类划分

命令(Commands)
“命令”用于定义Nagios如何执行某特定的监控工作。它是基于某特定的Nagios插件定义出的一个抽象层,通常包含一组要执行的操作。

时段(Time periods)
“时段”用于定义某“操作”可以执行或不能执行的日期和时间跨度,如工作日内的每天8:00-18:00等;
联系人和联系人组(Contacts and contact groups)

“联系人”用于定义某监控事件的通知对象、要通知的信息以及这些接收通知者何时及如何接收通知;一个或多个联系人可以定义为联系人组,而一个联系人也可以属于多个组;

主机和主机组(host and host groups)
“主机”通常指某物理主机,其包括此主机相关的通知信息的接收者(即联系人)、如何及何时进行监控的定义。主机也可以分组,即主机组(host groups),一个主机可同时属于多个组;

服务(Services)
“服务”通常指某主机上可被监控的特定的功能或资源,其包括此服务相关的通知信息的接收者、如何及何时进行监控等。服务也可以分组,即服务组(Service groups),一个服务可同时属于多个服务组;

在这里插入图片描述
Nagios 通过NRPE 来远端管理服务

  1. Nagios 执行安装在它里面的check_nrpe 插件,并告诉check_nrpe 去检测哪些服务。
  2. 通过SSL,check_nrpe 连接远端机子上的NRPE daemon
  3. NRPE 运行本地的各种插件去检测本地的服务和状态(check_disk,…etc)
  4. 最后,NRPE 把检测的结果传给主机端的check_nrpe,check_nrpe 再把结果送到Nagios状态队列中。
  5. Nagios 依次读取队列中的信息,再把结果显示出来。

Nagios监控服务器安装配置

实验环境:
10.10.10.11---- Nagios 服务端
10.10.10.12---- 被监控端
解决安装 Nagios 的依赖关系 (10.10.10.11)

 # 需要注意 *gb* 必须按照视屏的方式进行后安装 
[root@localhost ~]$ mount -t iso9660 /dev/cdrom /mnt/cdrom #挂载本地yum光盘
[root@localhost ~]$ yum -y install httpd gcc glibc glibc-common php php-mysql
[root@localhost ~]$ cd /mnt/cdrom/Packages
[root@localhost ~]$ yum -y install *gd*

创建运行身份 (10.10.10.11)

[root@localhost ~]$ groupadd nagcmd # 创建运行组 
[root@localhost ~]$ useradd -m nagios # 创建运行用户 nagios 
[root@localhost ~]$ usermod -a -G nagcmd nagios # 将 nagios 用户添加到 nagcmd 组中 
[root@localhost ~]$ usermod -a -G nagcmd apache # 将 apache 用户添加到 nagcmd 组中

编译安装 nagios (10.10.10.11)

#上传  nagios.iso
[root@localhost ~]$ mkdir /iso
[root@localhost ~]$ mount -o loop nagios.iso /iso
[root@localhost ~]$ cp -a /iso/* .
[root@localhost ~]$ cd /root
[root@localhost ~]$ tar -zxvf nagios-3.3.1.tar.gz &&  cd nagios # 解压 Nagios 源码包 
[root@localhost ~]$ ./configure --with-command-group=nagcmd --enable-event-broker # 生成 Nagios Makefile 文件 
[root@localhost ~]$ make all 
[root@localhost ~]$ make install 
[root@localhost ~]$ make install-init 
[root@localhost ~]$ make install-config 
[root@localhost ~]$ make install-commandmode 
[root@localhost ~]$ vim /usr/local/nagios/etc/objects/contacts.cfg 
email       nagios@localhost   #这个是默认设置 
[root@localhost ~]$ make install-webconf 
[root@localhost ~]$ htpasswd -c /usr/local/nagios/etc/htpasswd.users nagiosadmin
New password: #123
Re-type new password: #123
Adding password for user nagiosadmin
 [root@localhost ~]$ service httpd restart

编译、安装 nagios-plugins (10.10.10.11)

[root@localhost ~]$ cd /root
[root@localhost ~]$ tar zxf nagios-plugins-1.4.14.tar.gz 
[root@localhost ~]$ cd nagios-plugins-1.4.14
[root@localhost ~]$ ./configure --with-nagios-user=nagios --with-nagios-group=nagios --with-mysql --enable-perl-modules 
[root@localhost ~]$ make && make install

配置并启动 Nagios (10.10.10.11)

[root@localhost ~]$ chkconfig --add nagios && chkconfig nagios on 
[root@localhost ~]$ /usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg 
[root@localhost ~]$ service nagios start 

浏览器输入10.10.10.11/nagios访问,用户名nagiosadmin,密码123
nagios目录解释

[root@localhost ~]$ cd /usr/local/nagios/
bin:Nagios 可执行程序所在目录  nagios  nagiostats  nrpe
etc:配置文件
libexec:Nagios 外部插件所在目录  check_ifstatus     
sbin :Nagios CGI 文件所在目录,也就是执行外部命令所需文件所在的目录

histogram.cgi      showlog.cgi    statuswrl.cgi
share:Nagios网页文件所在的目录 
var:Nagios 日志文件、lock 等文件所在的目录 nagios.log

配置 linux 端监控 (10.10.10.12)
创建用户

[root@localhost ~]$ mount -t iso9660 /dev/cdrom /mnt/cdrom #挂载本地yum光盘
[root@localhost ~]$ scp root@10.10.10.11:/root/nagios.iso /root
[root@localhost ~]$ mkdir /iso
[root@localhost ~]$ mount -o loop nagios.iso /iso
[root@localhost ~]$ cp -a /iso/* .
[root@localhost ~]$ useradd nagios

为了安装 nrpe,先安装 nagios-plugins-1.4.14.tar.gz 插件

[root@localhost ~]$ tar zxf nagios-plugins-1.4.14.tar.gz 
[root@localhost ~]$ cd nagios-plugins-1.4.14 
[root@localhost ~]$ ./configure --with-nagios-user=nagios --with-nagios-group=nagios 
[root@localhost ~]$ make all && make install
[root@localhost ~]$ yum -y install openssl openssl-devel

安装 nrpe

[root@localhost ~]$ cd && tar -zxvf nrpe-2.12.tar.gz 
[root@localhost ~]$ cd nrpe-2.12
[root@localhost ~]$ ./configure --enable-ssl --with-ssl-lib=/usr/lib64/ 
[root@localhost ~]$ make all 
[root@localhost ~]$ make install-plugin 
[root@localhost ~]$ make install-daemon 
[root@localhost ~]$ make install-daemon-config

配置 nrpe 信息

[root@localhost ~]$ vim /usr/local/nagios/etc/nrpe.cfg 
allowed_hosts=10.10.10.11,127.0.0.1  #添加服务器ip
[root@localhost ~]$ /usr/local/nagios/bin/nrpe -c /usr/local/nagios/etc/nrpe.cfg -d

服务端安装nrpe 插件 (10.10.10.11)

[root@localhost ~]$ yum -y install openssl openssl-devel
[root@localhost ~]$ cd && tar -zxvf nrpe-2.12.tar.gz 
[root@localhost ~]$ cd nrpe-2.12
[root@localhost ~]$ ./configure --enable-ssl --with-ssl-lib=/usr/lib64/ 
[root@localhost ~]$ make all 
[root@localhost ~]$ make install-plugin 

commands.cfg 定义外部构件 nrpe (10.10.10.11)

[root@localhost ~]$ vim /usr/local/nagios/etc/objects/commands.cfg
define command{ 
	command_name check_nrpe 
	command_line $USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$ 
}

定义 linux.cfg

[root@localhost ~]$ cd /usr/local/nagios/etc/objects
[root@localhost ~]$ cp -a windows.cfg linux.cfg
[root@localhost ~]$ sed -i 's/windows/linux/g' linux.cfg
[root@localhost ~]$ vim linux.cfg
define host{
        use             linux-server    ; Inherit default values from a template
        host_name       linux     ; The name we're giving to this host        alias           My linux Server ; A longer name associated with the host
        address         10.10.10.12     ; IP address of the host #(客户端 IP 既被监控的 IP)
        }
 #dG,光标以后全部删除,然后添加如下内容
define service{  #负载检测
	use                   generic-service 
	host_name             linux 
	service_description   check-load 
	check_command         check_nrpe!check_load 
}
define service{ #用户数
	 use                   generic-service 
	 host_name             linux 
	 service_description   check-users 
	 check_command         check_nrpe!check_users 
}
define service{ #总进程
	 use                   generic-service 
	 host_name             linux 
	 service_description   otal_procs 
	 check_command         check_nrpe!check_total_procs 
 }
[root@localhost ~]$ vim /usr/local/nagios/etc/nagios.cfg
cfg_file=/usr/local/nagios/etc/objects/windows.cfg
cfg_file=/usr/local/nagios/etc/objects/linux.cfg
#检测配置有没有错误
[root@localhost ~]$ /usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg
[root@localhost ~]$ service nagios restart

配置 windos 端监控
1)被监控端安装 NSClient+±0.3.8-Win32.msi
2)安装完成后修改配置文件 NSC.ini 把需要的库都打开
3)在监控服务器上修改 nagios 配置文件 nagios.cfg

[root@localhost ~]$ vim /usr/local/nagios/objects/windows.cfg
define host{ 
	use                windows-server ; Inherit default values from a template 
	host_name          winserver ; The name we're giving to this host 
	alias              My Windows Server ; A longer name associated with the host 
	address            10.10.10.99 ; 你主机的 IP
 }
[root@localhost ~]$ vim //usr/local/nagios/etc/nagios.cfg
cfg_file=/usr/local/nagios/etc/objects/windows.cfg
[root@localhost ~]$ service nagios restart

Zabbix

概述

Zabbix是什么?
Zabbix 是一个基于 WEB 界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案 ( 基于 GPL V2 )
基于B/S架构+C/S架构,融合了Cacti 和 Nagios 两款软件的特点

组件说明

常用组件
Zabbix 主要由 2 部分构成,Zabbix server 与可选组件 Zabbix agent

  1. zabbix agent:部署在被监控主机上,负责收集被监控主机的数据,并将数据发送给zabbix server。
  2. zabbix server:负责接收agent发送的报告信息,并且负责组织配置信息、统计信息、操作数据等。
  3. zabbix database:用于存储所有zabbix的配置信息、监控数据的数据库。
  4. zabbix web:zabbix的web界面,管理员通过web界面管理zabbix配置以及查看zabbix相关监控信息,可以单独部署在独立的服务器上。
  5. zabbix proxy:可选组件,用于分布式监控环境中,zabbix proxy代表server端,完成局部区域内的信息收集,最终统一发往server端。
    在这里插入图片描述
    工作流程:Agentd安装在被监控的主机上,Agent负责定期收集客户端本地各项数据,并发送至Zabbix Server端,Zabbix Server收到数据,将数据存储到数据库中,用户基于Zabbix WEB可以看到数据在前端展现图像。当Zabbix监控某个具体的项目,改项目会设置一个触发器阈值,当被监控的指标超过该触发器设定的阈值,会进行一些必要的动作,动作包括:发送信息(邮件、微信、短信)、发送命令(SHELL 命令、Reboot、Restart、Install等)

Zabbix 进程构成

zabbix 安装完成后,有 5 个可选程序需要另外安装:zabbix_agentd、zabbix_get、zabbix_proxy、zabbix_sender、 zabbix_server,zabbix_java_gateway

  1. zabbix_agentd: 部署在被监控主机上,客户端守护进程,此进程收集客户端数据,例如 cpu 负载、内存、硬盘使用情况等
  2. zabbix_get: zabbix 工具,单独使用的命令,通常用于排错
  3. zabbix_sender: zabbix 工具,用于发送数据给 server 或者 proxy ,在脚本完成之后使用 sender 主动将数据提交
  4. zabbix_server: zabbix 服务端守护进程,所有的数据都是被提交或主动提交到
    zabbix_server 端
  5. zabbix_proxy: zabbix 代理守护进程。功能类似 server,唯一不同的是它只是一个中转站,它需要把收集到的数据提交/被提交到 server 里
  6. zabbix_java_gateway: zabbix2.0 之后引入的一个功能。顾名思义:Java 网关,类似 agentd,但是只用于 Java 方面。需要特别注意的是,它只能主动去获取数据,而不能被动获取数据。它的数据最终会给到 server 或者 proxy

Zabbix实验构建

环境准备:centos7
网络类型: 两个网卡,一个仅主机模式(static:10.10.10.11),一个nat模式(dhcp),最小化系统安装
虚拟机配置:
在这里插入图片描述
【编辑】----【虚拟网络编辑器】----修改仅主机的网卡。关闭DHCP服务,子网改成10.10.10.0
在这里插入图片描述

#第一块网卡
[root@localhost ~]$ vi /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static  #修改此处,改为static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=48f11f35-eb9f-40de-92f8-85492b0258c5
DEVICE=ens33
ONBOOT=yes     #开机自启,改为yes 
IPADDR=10.10.10.11   #ip地址
NETMASK=255.255.255.0   #子网掩码

#第二块网卡
[root@localhost ~]$ vi /etc/sysconfig/network-scripts/ifcfg-ens34
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static  #修改此处,改为static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens34
UUID=48f11f35-eb9f-40de-92f8-85492b0258c5
DEVICE=ens34
ONBOOT=yes     #开机自启,改为yes
[root@localhost ~]$ ifconfig  #查看网卡配置,如果提示没有,则需要下载net-tools
[root@localhost ~]$ yum -y install net-tools

关闭firewalld防火墙 和 selinux防火墙

[root@localhost ~]$ systemctl stop firewalld && systemctl disable firewalld
[root@localhost ~]$ setenforce 0 #临时关闭selinux防火墙
[root@localhost ~]$ getenforce  #查看selinux防火墙状态

设置yum源(网络或者本地都可)

安装常用工具

[root@localhost ~]$ yum -y install lrzsz vim gcc gcc-c++

安装 LAMP 环境

#安装mariadb http php,数据库centos7是mariadb,与mysql一样的
[root@localhost ~]$ yum -y install mariadb mariadb-server httpd php php-mysql 
[root@localhost ~]$ systemctl start httpd && systemctl enable httpd 
[root@localhost ~]$ systemctl start mariadb && systemctl enable mariadb
#mariadb不会初始化数据库,这里需要手动初始化一下
[root@localhost ~]$ mysql_secure_installation
NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!

In order to log into MariaDB to secure it, we'll need the current
password for the root user.  If you've just installed MariaDB, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.

Enter current password for root (enter for none): #mysql的root密码,还没设置,直接回车即可
OK, successfully used password, moving on...

Setting the root password ensures that nobody can log into the MariaDB
root user without the proper authorisation.

Set root password? [Y/n] y #是否设置root密码,输入y是
New password: root  #输入密码
Re-enter new password: root #再次数据密码,两次需要一致
Password updated successfully!
Reloading privilege tables..
 ... Success!
....
Remove anonymous users? [Y/n] y #移除匿名用户,输入y是
....
Disallow root login remotely? [Y/n] y #拒绝远程登陆,输入y是
....
Remove test database and access to it? [Y/n] y #移除测试数据库,输入y是
....
Reload privilege tables now? [Y/n] y #刷新权限表,输入y是
....

All done!  If you've completed all of the above steps, your MariaDB
installation should now be secure.

Thanks for using MariaDB!
==========================================
[root@localhost ~]$ mysql -uroot -proot
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 10
Server version: 5.5.68-MariaDB MariaDB Server

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]> 

安装 Zabbix 程序 (服务端)
Zabbix官网

#安装的时候显示安装进度,安装zabbix官网yum源安装包
[root@localhost ~]$ rpm -ivh http://repo.zabbix.com/zabbix/3.2/rhel/7/x86_64/zabbix-release-3.2-1.el7.noarch.rpm
[root@localhost ~]$ rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-ZABBIX  #导入密钥
#安装zabbix连接数据库,web页面,agent部署在被监控的主机上
#被监控端只需要部署agent即可
[root@localhost ~]$ yum -y install zabbix-server-mysql zabbix-web-mysql zabbix-agent

导入Zabbix官方数据库模板——初始化数据库(zabbix-server端操作)

[root@localhost ~]$ mysql -uroot -proot
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 10
Server version: 5.5.68-MariaDB MariaDB Server
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> CREATE DATABASE zabbix DEFAULT CHARACTER SET utf8 COLLATE utf8_bin; #创建一个叫zabbix的数据库,默认字符集为utf8,排序方式为utf8_bin
Query OK, 1 row affected (0.00 sec)

MariaDB [(none)]> grant all privileges on zabbix.* to zabbix@localhost identified by 'zabbix';
Query OK, 0 rows affected (0.00 sec)  #设置Zabbix库的所有表的用户是zabbix,密码是zabbix,权限为可控权限

接着导入zabbix初始化数据
#zcat /usr/share/doc/zabbix-server-mysql*/create.sql.gz | mysql -uzabbix -pzabbix zabbix -e "use zabbix;"
#zcat,先解压,在通过cat打开
[root@localhost yum.repos.d]$ cd /usr/share/doc/zabbix-server-mysql-3.2.11
[root@localhost zabbix-server-mysql-3.2.11]$ ls
AUTHORS  ChangeLog  COPYING  create.sql.gz  NEWS  README
[root@localhost zabbix-server-mysql-3.2.11]$ zcat create.sql.gz | mysql -uroot -p zabbix  #-p代表指定需要还原的数据库
Enter password: 

#查看表,确定zabbix库中是否导入了数据
[root@localhost ~]$ mysql -uroot -proot
use zabbix;
show tables;
1)配置zabbix_server的配置文件
[root@localhost ~]$ vim /etc/zabbix/zabbix_server.conf
DBHost=localhost #连接数据库地址
DBName=zabbix #连接数据库名
DBUser=zabbix #连接数据库用户名
DBPassword=zabbix #连接数据库用户密码
[root@localhost ~]$ systemctl start zabbix-server && systemctl enable zabbix-server 

编辑Zabbix前端的PHP配置,zabbix_web #将时区修改为亚洲/上海
sed -i “s/;date.timezone =/date.timezone = Asia/Shanghai/g” /etc/php.ini

[root@localhost ~]$ vim /etc/httpd/conf.d/zabbix.conf
    <IfModule mod_php5.c>
        php_value max_execution_time 300
        php_value memory_limit 128M
        php_value post_max_size 16M
        php_value upload_max_filesize 2M
        php_value max_input_time 300
        php_value always_populate_raw_post_data -1
        php_value date.timezone Asia/Shanghai #修改为上海的时区
    </IfModule>
  [root@localhost ~]$ systemctl restart httpd

调整时间同步
如何时间同步?

[root@localhost ~]$ yum -y install ntpdate 
[root@localhost ~]$ ntpdate cn.pool.ntp.org

修改apached服务器的默认访问路径(通过apache主配置文件)

[root@localhost ~]$ cd /usr/share/zabbix/
[root@localhost ~]$ vim /etc/httpd/conf/httpd.conf
DocumentRoot "/var/www/html/" #修改为/usr/share/zabbix/ 
[root@localhost ~]$ systemctl restart httpd

测试:浏览器输入10.10.10.11(zabbix服务端的ip),成功访问!!进入zabbix安装步骤

2)安装Zabbix Web页面

在这里插入图片描述
检测的php的相关依赖,点击下一步
在这里插入图片描述
配置数据库相关信息
在这里插入图片描述
zabbix服务器端的相关信息,默认就行,下一步
在这里插入图片描述
在这里插入图片描述
安装成功
在这里插入图片描述
然后就跳到登录界面了,用户名是Admin,密码是zabbix
在这里插入图片描述
server web支持中文
在这里插入图片描述

添加被监控端(本机)

#修改被监控端的配置文件,agent前面已经安装
[root@localhost ~]$ vim /etc/zabbix/zabbix_agentd.conf 
Server=10.10.10.11 #zabbix-server的ip
# ListenPort=10050 默认监听段口是tcp10050
ServerActive=10.10.10.11 #zabbix-server的ip
Hostname=10.10.10.11 #本机的ip地址,或者可解析的主机名
[root@localhost ~]$ systemctl start zabbix-agent && systemctl enable zabbix-agent
[root@localhost ~]$ netstat -anpt | grep :10050
tcp        0      0 0.0.0.0:10050           0.0.0.0:*               LISTEN      13538/zabbix_agentd 
tcp6       0      0 :::10050                :::*                    LISTEN      13538/zabbix_agentd 

=================================================================

#如果需要监控的主机比较多,可以使用ansible部署agent
---
 - hosts: test
   remote_user: root
   gather_facts: False
   tasks:
   - name: get localhost ip  #获取ip
     shell : ip addr show ens33|grep 'inet\b'|awk '{print $2}'|awk -F '/' '{print $1}'   
     register : info
   - name: rpm1
     shell: "rpm -ivh http://repo.zabbix.com/zabbix/3.4/rhel/7/x86_64/zabbix-agent-3.4.4-2.el7.x86_64.rpm"
   - name: yum_zabbix
     shell: "yum install -y zabbix-agent zabbix-get"
   - name: update_Server
     lineinfile:
       path: /etc/zabbix/zabbix_agentd.conf
       regexp: '^Server='
       line: Server=10.3.118.200 #zabbix-server的ip
   - name: update_ServerActive
     lineinfile:
       path: /etc/zabbix/zabbix_agentd.conf
       regexp: '^ServerActive='
       line: ServerActive=10.3.118.200 #zabbix-server的ip
   - name: update_hostname
     lineinfile:
       path: /etc/zabbix/zabbix_agentd.conf
       regexp: '^Hostname='
       line: Hostname={{info.stdout}}  #获取上面info变量的信息
       #Hostname=10.10.10.11 #本机的ip地址,或者可解析的主机名
3)web页面添加监控

点击配置—主机,删除这个停用的监控,自己进行配置
在这里插入图片描述
配置步骤:
首先创建一个主机组
配置-----> 主机群组-----> 创建主机群组(web页面右上角)-----> 添加组名,如:Zabbix agents(在弹出框中输入组名)----->添加
在这里插入图片描述
添加一个主机
配置 ----->主机 -----> 右上角在群组那里选择Zabbix agents-----> 点击创建主机
在这里插入图片描述
在这里插入图片描述

②给此主机引用一条模板,模板定义了监控那些选项数据
在这里插入图片描述
在这里插入图片描述
然后点击模板弹框下面的选择,这里就会添加上刚才勾选的,然后点击添加才能添加上
在这里插入图片描述
然后返回主机添加页面,点击下面的添加即可
在这里插入图片描述下面是添加完的效果图
在这里插入图片描述
最后看下图形效果
检测中-----> 图形----->然后就是选择要看什么了,如下图:
在这里插入图片描述
由上图可以看出,所有的汉字都是白框没有显示出来。

修改中文乱码问题

按Win+R键,输入fonts回车,将windows端的msyh.ttf字体文件(随便一个字体都可以)上传到 zabbix-server服务器端的/var/www/html/zabbix/fonts目录中。

在这里插入图片描述
在这里插入图片描述

#把上传的字体放到zabbix的fonts目录下
[root@localhost ~]$ mv SIMSUN.TTC /usr/share/zabbix/fonts/
[root@localhost ~]$ cd /usr/share/zabbix/fonts/
[root@localhost fonts]$ ls
graphfont.ttf  SIMSUN.TTC
[root@localhost fonts]$ mv SIMSUN.TTC  SIMSUN.ttf    #修改后缀为ttf,默认识别ttf
[root@localhost fonts]$ chmod a+x SIMSUN.ttf         #赋予执行权限
[root@localhost fonts]$ ls -al ./
总用量 17796
drwxr-xr-x.  2 root root       45 1120 20:01 .
drwxr-xr-x. 13 root root     4096 1120 16:57 ..
lrwxrwxrwx.  1 root root       33 1120 16:57 graphfont.ttf -> /etc/alternatives/zabbix-web-font
-rwxr-xr-x.  1 root root 18214472 319 2019 SIMSUN.ttf
[root@localhost fonts]$ mv SIMSUN.ttf song.ttf      #为了方便记忆,直接改为song.ttf
[root@localhost fonts]$ ls
graphfont.ttf  song.ttf
#修改php配置文件
[root@localhost ~]$ vim /usr/share/zabbix/include/defines.inc.php
#修改 zabbix php 页面配置,将'graphfont' 修改为 song
define('ZBX_GRAPH_FONT_NAME',           'song'); // font file nam

在这里插入图片描述
再去web查看,发现字体正常显示了!!!
在这里插入图片描述

4)配置手动添加主机(10.10.10.15)

添加监控主机(10.10.10.15)

#上传zabbix-agent的rpm包,进行安装
[root@localhost ~]$ rpm -ivh zabbix-agent-3.2.1-1.el7.x86_64.rpm 
[root@localhost ~]$ systemctl start httpd && systemctl enable httpd
[root@localhost ~]$ echo "1111111" >> /var/www/html/index.html
==================================================
#修改被监控端的配置文件
[root@localhost ~]$ vim /etc/zabbix/zabbix_agentd.conf 
Server=10.10.10.11 #zabbix-server的ip
# ListenPort=10050 默认监听段口是tcp10050
ServerActive=10.10.10.11 #zabbix-server的ip
Hostname=10.10.10.15 #本机的ip地址,或者可解析的主机名
[root@localhost ~]$ systemctl start zabbix-agent.service && systemctl enable zabbix-agent.service 
5)配置自动发现主机功能(批量添加)

接着在zabbix服务器web上添加主机,跟上面步骤相同!!
将这两个主机(10.10.10.13、10.10.10.14)当作现实中的两千台主机。
在Linux上的配置,跟上面10.10.10.15配置一样,唯一的区别在web界面上的配置。

先配置动作
【配置】------> 【动作】----->【事件源】选择自动发现的动作,然后点击【创建动作】
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
最后点击【添加】
在这里插入图片描述
配置自动发现规则
在web页面点击【配置】------> 【自动发现】----->【创建发现规则】添加一个自动发现规则
在这里插入图片描述
在这里插入图片描述
然后点击【监测中】------> 【自动发现】会发现两台主机已经被自动发现

在这里插入图片描述

6)Nginx并发监控

把10.10.10.12服务从zabbix-web配置页面删掉,然后停了这台主机的httpd服务
在这里插入图片描述
使用之前10.10.10.12服务器操作

源码编译安装 Nginx 服务器并开启状态统计模块

[root@localhost ~]$ systemctl stop httpd
#上传nginx源码包
[root@localhost ~]$ tar -zxvf nginx-1.2.6.tar.gz && cd nginx-1.2.6
#安装相关依赖
[root@localhost ~]$ yum -y install pcre pcre-devel zlib zlib-devel gcc*
[root@localhost ~]$ useradd -s /sbin/nologin -M nginx
[root@localhost ~]$ ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module
[root@localhost ~]$ make && make install #编译安装
[root@localhost ~]$ echo "123" >> /usr/local/nginx/html/index.html
[root@localhost ~]$ /usr/local/nginx/sbin/nginx #启动nginx

开启健康检测功能

[root@localhost ~]$ vim /usr/local/nginx/conf/nginx.conf
...
server {

        location / {
            root   html;
            index  index.html index.htm;
        }
        #添加如下内容
        location /nginx-status { #开启健康统计
                stub_status on;
        }
}
.....
#检测配置文件
[root@localhost ~]$ /usr/local/nginx/sbin/nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
#重载
[root@localhost ~]$ kill -HUP $( cat /usr/local/nginx/logs/nginx.pid)

接着去测试,是否开启。浏览器输入10.10.10.12/nginx-status
在这里插入图片描述
在被监控端编写 Nginx 监控脚本

[root@localhost ~]$ vim nginx-status.sh
#!/bin/bash 
HOST="127.0.0.1" 
PORT="80"
 # 检测 nginx 进程是否存在
function ping { 
  	/sbin/pidof nginx | wc -l 
}
  
# 检测 nginx 性能 
function active {
 	/usr/bin/curl "http://$HOST:$PORT/nginx-status/" 2>/dev/null| grep 'Active' | awk '{print $NF}' 
} 

function reading { 
	/usr/bin/curl "http://$HOST:$PORT/nginx-status/" 2>/dev/null| grep 'Reading' | awk '{print $2}' 
}

function writing { 
	/usr/bin/curl "http://$HOST:$PORT/nginx_status/" 2>/dev/null| grep 'Writing' | awk '{print $4}'
}
 
function waiting { 
	/usr/bin/curl "http://$HOST:$PORT/nginx-status/" 2>/dev/null| grep 'Waiting' | awk '{print $6}' 
}

function accepts { 
	/usr/bin/curl "http://$HOST:$PORT/nginx-status/" 2>/dev/null| awk NR==3 | awk '{print $1}' 
}

function handled {
 	/usr/bin/curl "http://$HOST:$PORT/nginx-status/" 2>/dev/null| awk NR==3 | awk '{print $2}' 
}

function requests { 
	/usr/bin/curl "http://$HOST:$PORT/nginx-status/" 2>/dev/null| awk NR==3 | awk '{print $3}'
}
# 执行 function 
$1
#添加执行权限
[root@localhost ~]$ chmod a+x nginx-status.sh
[root@localhost ~]$ bash nginx-status.sh active
[root@localhost ~]$ mv nginx-status.sh /etc/zabbix/zabbix_agentd.d/
#10.10.10.13执行操作,实现无限循环访问10.10.10.12,制造并发量
[root@localhost ~]$ while 2>1
do
curl 10.10.10.12
done

进入agent配置文件(/etc/zabbix/zabbix_agentd.conf),开启自定义脚本模块

[root@localhost ~]$ vim /etc/zabbix/zabbix_agentd.conf
UnsafeUserParameters=1 #是否开启自定义脚本,改为1
UserParameter=nginx.status[*],/etc/zabbix/zabbix_agentd.d/nginx-status.sh $1 #添加这一行
[root@localhost ~]$ systemctl restart zabbix-agent.service 

接着在 zabbix_get(zabbix-serve) 获取数据 (10.10.10.11),检测是否能从server端获取到agent传过来的数据。

[root@localhost ~]$ yum -y install zabbix-get
[root@localhost ~]$ zabbix_get -s 10.10.10.12 -k 'nginx.status[requests]' 
43021    #测试成功
[root@localhost ~]$ zabbix_get -s 10.10.10.12 -k 'nginx.status[ping]' 
1

在这里插入图片描述
导入模板,配置nginx监控主机
模板链接:https://pan.baidu.com/s/1TG48uvzBrcg3AxsNcjk49Q
提取码:22fj
然后在web配置页面,点击【 配置 】-----> 【 模板 】------>【 导入 】
在这里插入图片描述
在这里插入图片描述
然后配置nginx主机监控
【配置】-------->【主机】--------->【创建主机】
在这里插入图片描述
添加模板
在这里插入图片描述
此时已经生效!!!
在这里插入图片描述
再去看图表,已经生成了
在这里插入图片描述

7)Web场景、组合图
  • web场景功能:可以让zabbix服务器端模拟像用户一样去访问到web服务器,我们可以根据他们的返回码,确定这台web服务器工作是否正常。不是用一些low的手段去检测进程、端口号等。因为进程、端口号是可以假死的,即使进程虽然还在,但web服务器也不一定还在工作。但是web场景功能是模拟的客户端的访问,是通过返回值判断,是否存在
  • 组合图形功能:可以把一些比较重要的参数放在一张图形里展示。
①创建web场景

【配置】-------->【主机】--------->【nginx服务器】-------->【应用集】
在这里插入图片描述
创建应用集
在这里插入图片描述
添加名称http-code
在这里插入图片描述
点击web场景
在这里插入图片描述
点击创建web场景
在这里插入图片描述
在这里插入图片描述
再去nginx服务器上,写一个html,专门用于测试web服务器是否正常的。

[root@localhost ~]$ echo "test"  >> /usr/local/nginx/html/test.html

在这里插入图片描述
将此url,加入下图中
在这里插入图片描述
最后点击【场景】,点击下面的【添加】,场景构建完成
在这里插入图片描述
由于场景只会收集http-code,并不会报警,所以还要创建触发器
【配置】-------->【主机】--------->选择这个nginx服务器,然后点击【触发器】
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
往下翻,找到http-code,选择无正负那个
在这里插入图片描述
在这里插入图片描述
再按照下图修改,意义为判断返回code值,3次不等于200时,则为异常
在这里插入图片描述
最后点击添加
在这里插入图片描述
再去触发器中查找,已经存在了
在这里插入图片描述
接着去测试,web场景是否好用
首先观察仪表板nginx是正常的
在这里插入图片描述
接着去nginx后台下,将其测试页面删除。

[root@localhost ~]$ rm -rf /usr/local/nginx/html/test.html 

等一分钟,再去查看仪表盘是否出现异常告警
ok,此时出现告警了,则代表触发器设置成功!!这种web场景功能的方法,比去测试后台的进程、端口号,更加的准确。
在这里插入图片描述
接着,我们又去nginx后台,将其test页面添加回去,再等一分钟,查看告警是否会消失!

[root@localhost ~]$ echo "test"  >> /usr/local/nginx/html/test.html

ok,此时又恢复正常了!!!
在这里插入图片描述

②创建聚合图形

在这里插入图片描述
在这里插入图片描述
再点击重要信息
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
可以添加许多图形,比如添加时钟
在这里插入图片描述
在这里插入图片描述
还可以加许多模块,这里就不一一添加了。
在这里插入图片描述
因此,聚合图形也创建成功了!!以后在仪表盘下点击聚合图形就能够找到我们设置的图形了!!!工作中也可将需要的图形投屏到电脑上,方便展示!!
在这里插入图片描述

8)报警设置
①网页报警

点击这个小人,正在发送的消息,设置报警信息
在这里插入图片描述
测试:
我们将打开前端信息中,勾选其中的严重模块,再点更新。接着将nginx服务器的test.html删了,则又会触发web场景功能。此时得到的结果就是会触发严重这个模块的音效!!!
在这里插入图片描述

②扩展:利用钉钉实现终端报警

添加钉钉机器人
登陆钉钉,创建一个群聊,最少两个人,点击群设置,点击群机器人,点击自定义,添加一个机器人,会有一个webhook,复制下来
zabbix-server服务端操作(10.10.10.11)

[root@localhost ~]$ vim token.sh
#!/bin/bash
to=$1  #给谁
subject=$2  #标题
text=$3  #内容
curl 'https://oapi.dingtalk.com/robot/send?access_token=8448004b52d7edd0195e5e6c1f4d105e72826a893a2c885d997affbeb1edc391' \ #改成自己钉钉的webhook
	-H 'Content-Type: application/json' \
	-d '
	{"msgtype": "text",
		"text": {
		"content": "'"$text"'"
	},
	"at":{
		"atMobiles": [ 
			"'"$1"'" 
		],
		"isAtAll": false
		}
	}'
[root@localhost ~]$ chmod a+x token.sh
[root@localhost ~]$ chown zabbix.zabbix token.sh
#如果出现-bash: ./token.sh: /bin/bash^M: 坏的解释器: 没有那个文件或目录,则需要使用指令sed -i 's/\r$//' xxx.sh,会把 xxx.sh 中的\r 替换成空白。原因是这个文件在Windows下编辑过,在Windows下每一行结尾是\n\r,而Linux下则是\n,所以才会有多出来的\r。
[root@localhost ~]$ ./token.sh 1 2 告警
#由于前面的安全模式设置了内容,所以必须有告警内容

把token脚本放到/usr/lib/zabbix/alertscripts/目录下

[root@localhost ~]$ cd /usr/lib/zabbix/alertscripts/
[root@localhost alertscripts]$ mv /root/token.sh .
[root@localhost alertscripts]$ ls
token.sh

web页面配置

  1. 创建媒体类型
    【配置】------> 【报警媒介类型】----->,然后点击【创建媒介类型】
    在这里插入图片描述
  2. 添加监控方式
    监控方式添加参数

{ALERT.SENDTO}
{ALERT.SUBJECT}
{ALERT.MESSAGE}

在这里插入图片描述
3. 创建报警动作
【配置】------> 【动作】----->【触发器】,然后点击【创建动作】
在这里插入图片描述
在这里插入图片描述
4.错误报警信息参数

标题(默认接收人)改为:
故障{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}

点击操作,添加操作细节

  1. 错误恢复报警信息设置

点击恢复操作,添加操作细节
在这里插入图片描述

标题(默认接收人)改为:
恢复{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}
  1. 给用户绑定媒体

【管理】------>【用户】选择Admin
在这里插入图片描述
在这里插入图片描述

测试:首先关闭一个agent,或者关闭nginx(10.10.10.12)
在这里插入图片描述
等一会,钉钉群里就会发送信息!!!
在这里插入图片描述
再恢复网卡,查看是否有恢复提示!!!
ok!成功
在这里插入图片描述

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐