Linux云计算之集群监控

一、监控简介

  1. 重要性

宕机损失案例:美国呼叫中心 24000 美金/小时
阿里/百度:不可估计

  1. 常见监控平台

1)Cacti

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

软件设计目标: 服务与性能检测为主 —— http://www.nagios.org/
数据展示平台: B/S
数据收集方式: C/S(预定义/自定义脚本)
在这里插入图片描述

3)Zabbix

软件设计目标: 全功能监控软件 —— http://www.zabbix.com
数据展示平台: B/S
数据收集方式: C/S(官方客户端)
在这里插入图片描述

二、Cacti 监控服务器

  1. 组件构成

组合框架: LAP
数据收集: SNMP
绘制图形: RRDtool
在这里插入图片描述

1)SNMP

收集数据展示图

在这里插入图片描述

2)RRDtool

官方定义: RRDtool 是开源行业标准,高性能的时间序列数据记录和绘图系统。RRDtool 可以很容易地集成到 shell 脚本、perl、python、ruby、lua 或 tcl 应用程序中

3)工作架构

C/S 模式: 采集检测数据
B/S 模式: 管理检测数据

在这里插入图片描述
2. Cacti 监控组件安装配置

1)安装环境

yum -y install httpd mysql mysql-server mysql-devel libxml2-devel mysql-connector-odbc perl-DBD-MYSQL unixODBC php php-mysql php-pdo		#安装基础环境 LAMP
service httpd start		#启动 Apache
service mysqld start	#启动 MySQL
yum -y install net-snmp net-snmp-utils net-snmp-libs lm_sensors		#安装 SNMP、主板信息监控所需软件包

2)安装 rrdtool

tar -zxf rrdtool-1.4.5.tar.gz		#源码编译安装 RRDTOOL
cd rrdtool
./configure --prefix=/usr/local
make && make install 
如出错,按以下步骤解决 # 解决源码编译报错依赖
		第 1 步
			tar zxvf cgilib-0.5.tar.gz
			cd cgilib-0.5
			make
			cp libcgi.a /usr/local/lib
			cp cgi.h /usr/include
		第 2 步
			yum -y install libart_lgpl-devel pango-devel* cairo-devel*

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

部署源码包,并安装补丁文件

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

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

useradd runct		# 添加 runct 用户,用于 RRDTOOL 运行
chown -R root.root ./
chown -R runct.runct rra/log/

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

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

修改 cacti 配置文件

vim include/config.php		#配置 cacti 页面连接数据库的认证信息
	mysql
	cactidb
	localhost
	cactiuser
	pwd@123
	3306

调整 http 配置

vim /etc/httpd/conf/httpd.conf	#配置 Apache 对 cacti 的用户权限
	Listen 80
	DocumentRoot "/var/www/html/cacti"
	<Directory "/var/www/html/cacti">
	options None
	AllowOverride None
	Order allow,deny
	Allow from all
	</Directory>
	DirectoryIndex index.php index.html
	AddDefaultCharset utf-8
service httpd restart

安装

http://192.168.216.16/install	#进行安装

客户端配置

yum -y install net-snmp net-snmp-utils lm_sensors		#安装 SNMP 、主板信息监控所需软件包
vim /etc/snmp/snmp.conf
	41 服务器地址 默认为 default 共同体名称 默认为 public
	62 开放所有的 SNMP 查询权限 all 默认为 SystemView
	85 支持各种查询与访问 取消注释符号

收集数据

su -runct
php /var/www/html/cacti/poller.php		#生成对应的监控图表
crontab -e
	*/5 * * * * /usr/bin/php /var/www/htmlcacti/poller.php $>/dev/null		#配置 RRDTOOL的轮询任务
	exit
	service crond start

三、Nagios 监控服务器

  1. 相关原理

1)老牌监控服务器 Cacti —— Nagios 对比

Cacti

  • 收集数据、图形展示
  • 偏重网络流量
  • SNMP、OID、SNMP Agent

Nagios

  • 偏重主机、服务的状态
  • Agent
  • 脚本

2) Nagios 健康对象类划分

主机、主机组			服务/资源,服务组
联系人,联系人组		时段
命令

3)Nagios 收集数据架构图

在这里插入图片描述

4)Nagios 整体框架图

在这里插入图片描述

  1. 构建 Nagios 监控

1)解决安装 Nagios 的依赖关系: # 需要注意 *gb*必须按照视屏的方式进行后安装

# yum -y install httpd gcc glibc glibc-common *gd* php php-mysql

2)创建运行身份

# groupadd nagcmd		#创建运行组
# useradd -m nagios		#创建运行用户 nagios
# usermod -s -G nagcmd nagios		# 将 nagios 用户添加到 nagcmd 组
# usermod -a -G nagcmd apache		# 将 apache 用户添加到 nagcmd 组

3)编译安装 nagios:

# tar zxf nagios-3.1.2.tar.gz		# 解压 Nagios 源码包
# cd nagios-3.1.2
# ./configure --with-command-group --enable-event-broker #生成 Nagios Makefile 文件
# make all
# make install
# make install-init
# make install-config
# make install-commandmode
# vi /usr/local/nagios/etc/objects/contacts.cfg
	email		nagios@localhost		#这个是默认设置
# make install-webconf
# htpasswd -c /usr/local/nagios/etc/htpasswd.users nagiosadmin
# service httpd restart

4)编译、安装 nagios-plugins

# tar zxf nagios-plugins-1.4.15.tar.gz
# cd nagios-plugins-1.4.15
# ./configure --with-nagios-user=nagios --with-nagios-group=nagios --with-mysql --enable-perl-modules
# make
# make install

5)配置并启动 Nagios

# chkconfig --add nagios
# chkconfig nagios on
# /usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg
# service nagios start
http://your_nagios_IP/nagios

配置 windos 端监控

1)被监控端安装 NSClient +±0.3.8-Win32.msi
2)安装完成后修改配置文件 NSC.ini 把需要的库都打开
3)在监控服务器上修改 nagios 配置文件 nagios.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		192.168.0.191 ;你的主机IP	
}

配置 linux 端监控

1)创建用户

# useradd nagios

2)为了安装 nrpe,先安装 nagios-plugins-1.4.15.tar.gz 插件

# tar zxf nagios-plugins-1.4.15.tar.gz
# cd nagios-plugins-1.4.15
# ./configure --with-nagios-user=nagios --with-nagios-group=nagios
# make all
# make install

3)安装 nrpe

# tar -zxvf nrpe-2.12.tar.gz
# cd nrpe-2.12.tar.gz
# ./configure --enable-ssl --with-ssl-lib=/usr/lib64/
# make all
# make install-plugin
# make install-daemon
# make install-daemon-config

4)配置 nrpe 信息

# vim /usr/local/nagios/etc/nrpe.cfg
# allowed_host=192.168.216.251,127.0.0.1
# /usr/local/nagios/bin/nrpe -c /usr/local/nagios/etc/nrpe.cfg -d

5)服务端安装 nrpe 插件

# cd nagios-nrpe_2.8.1
# ./configure --enable-ssl --with-ssl-lib=/usr/lib64/
# make all
# make install-plugin

6)commands.cfg 定义外部构件 nrpe

# vi /usr/local/nagios/etc/objects/commands.cfg
	define command{
		command_name check_nrpe
		command_line $USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARGI$
	}

7)定义 mylinux.cfg

define host{
	use			linux-server
	host_name	mylinux/IP
	alias		mylinux
	address		192.168.0.27(客户端IP 既被监控的IP)
}
define service{
	use						generic-service
	host_name				mylinux
	service_description		check-load
	check_command			check_nrp!check_load
}

define service{
	use						generic-service
	host_name				mylinux
	service_description		check-users
	check_command			check_nrp!check_users
}
define service{
	use						generic-service
	host_name				mylinux
	service_description		otal_procs
	check_command			check_nrp!check_otal_procs
}

四、Zabbix 监控服务器

  1. Zabbix 介绍

1)Zabbix 是什么?

zabbix 是一个基于 WEB 界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案(基于 GPL V2)
zabbix 由 2 部分构成,zabbix server 与可选组件 zabbix agent

2)Zabbix 工作架构

在这里插入图片描述

3)Zabbix 进程构成

zabbix 安装完成后会产生 5 个程序: zabbix_agent、zabbix_get、zabbix_proxy、zabbix_sender、zabbix_server、zabbix_java_gateway 是可选,这个需要另外安装

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

4)Zabbix 硬件需求

在这里插入图片描述

  1. 构建 Zabbix 监控服务器

1)初始化系统设置

systemctl stop firewall
systemctl disable firewalld
setenforce 0
sed -i 's/SELINUX=enforcing.SENLINUX=disabled/g' /etc/selinux/config

2)安装 LAMP 环境

wget http://mirrots.163.com/.help/CentOS7-Base-163.repo
yum clean all
yum makecache
yum -y install mariadb mariadb-server httpd php php-mysql
systemctl enable httpd
systemctl restart httpd
systemctl enable mariadb
systemctl restart mariadb
mysql_secure_installation

3)安装 Zabbix 程序

rpm -ivh http://repo.zabbix.com/zabbix/3.2/rhel/7/x86_64/zabbix-release-3.2-1.el7.noarch.rpm
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-ZABBIX
yum -y install zabbix-server-mysql zabbix-web-mysql zabbix-agent

初始化数据库:

mysql -u root -p
CREATE DATABASE zabbix DEFAULT CHARACTER SET utf8 COLLATE utf8_bin;
grant all privileges on zabbix.* to zabbix@localhost identified by 'zabbix';

读入数据库:

cd /usr/share/doc/zabbix-server-mysql-3.2.1
zcat create.sql.gz | mysql -uroot -p zabbix

启动 Zabbix 服务

vim /etc/zabbix/zabbix_server.conf
	DBHost=localhost
	DBName=zabbix
	DBUser=zabbix
	DBPassword=zabbix

systemctl start zabbix-server
systemctl enable zabbix-server

编辑 zabbix 前端 php 配置

vim /etc/httpd/conf.d/zabbix.conf
	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

调整时间同步

yum -y install ntpdate
ntpdate cn.pool.ntp.org

重启 Apache 服务生效

systemctl restart httpd

4)修改中文乱码问题

Win+R > fonts > 拷贝微软雅黑字体改名为 mysql.ttf > /usr/share/zabbix/fonts

vim /usr/share/zabbix/include/defines.inc.php
	修改 zabbix php 页面配置,将 'graphfont' 修改为 msyh
		define('ZBX_GRAPH_FONT_NAME','msyh');

5)添加客户端

vi /usr/local/zabbix/etc/zabbix_agent.configure
	LogFile=/tmp/zabbix_agentd.log
	Server=192.168.1.195
	ServerActive=192.168.1.195
	Hostname=192.168.1.195

rpm -ivh http://repo.zabbix.com/zabbix/3.2/rhel/6/x86_64/zabbix-release-3.2-1.el6.noarch.rpm
  1. Zabbix 监控 Nginx 并发(自定义监控项、模板)

1)源码编译安装 Nginx 服务器并开启状态统计模块
2)Zabbix 客户端配置

编写 Nginx 监控脚本,在被监控端

#!/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/ngx_status/" 2>/dev/null | grep  'Active' | awk '{print $NF}'
	}
function reading {
	/usr/bin/curl "http://$HOST:$PORT/ngx_status/" 2>/dev/null | grep 'Reading' | awk '{print $2}'
}
function writing {
	/usr/bin/curl "http://$HOST:$PORT/ngx_status/" 2>/dev/null | grep 'Writing' | awk '{print $4}'
}
function waiting {
	/usr/bin/curl "http://$HOST:$PORT/ngx_status/" 2>/dev/null | grep 'Waiting' | awk '{print $6}'
}
function accepts {
	/usr/bin/curl "http://$HOST:$PORT/ngx_status/" 2>/dev/null | awk NR==3 | awk '{print $1}'
}
function handled {
	/usr/bin/curl "http://$HOST:$PORT/ngx_status/" 2>/dev/null | awk NR==3 | awk '{print $2}'
}
function requests {
	/usr/bin/curl "http://$HOST:$PORT/ngx_status/" 2>/dev/null | awk NR==3 | awk '{print $3}'
}
# 执行 function
$1

将自定义的 UserParameter 加入配置文件,然后重启 agentd

# cat /usr/local/zabbix-3.0.0/etc/zabbix_agent.conf | grep nginx
UserParameter=nginx.status[*],/usr/local/zabbix-3.0.0/scripts/ngx-status.sh $1
# killall zabbix_agentd
# /usr/local/zabbix-3.0.0/sbin/zabbix_agentd

zabbix_get 获取数据

# /usr/local/zabbix-3.0.0/bin/zabbix_get -s 10.10.1.121 -k 'nginx.status[accepts]'
	9570756
# /usr/local/zabbix-3.0.0/bin/zabbix_get -s 10.10.1.121 -k 'nginx.status[ping]'
	1
  1. Zabbix 联合钉钉实现终端报警

1)监控方式添加参数

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

2)错误报警信息参数

标题改为:

故障{TRIGGER.STATUS},服务器:{HOSTNAME1} 发生:{TRIGGER.NAME}故障!

信息改为:

告警主机:{HOSTNAME1}
告警时间:{EVENT.DATE} {EVENT.TIME}
告警等级:{TRIGGER.SERVERITY}
告警信息:{TRIGGER.NAME}
告警项目:{TRIGGER.KEY1}
问题详情:{ITEM.NAME}:{ITEM.VALUE1}
当前状态:{TRIGGER.STATUS}:{ITEM.VALUE1}
事件 ID:{EVENT.ID}

3)错误恢复报警信息设置

标题改为:

恢复{TRIGGER.STATUS},服务器:{HOSTNAME1}:{TRIGGER.NAME}已恢复!

信息改为:

告警主机:{HOSTNAME1}
告警时间:{EVENT.DATE} {EVENT.TIME}
告警等级:{TRIGGER.SERVERITY}
告警信息:{TRIGGER.NAME}
告警项目:{TRIGGER.KEY1}
问题详情:{ITEM.NAME}:{ITEM.VALUE}
当前状态:{TRIGGER.STATUS}:{ITEM.VALUE1}
事件 ID:{EVENT.ID}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值