Files
baim0-learn/nginx/22.做好Nginx的监控-上篇.md
T
2024-03-09 13:38:35 +08:00

229 lines
12 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
## 22.做好Nginx的监控-上篇
\[引言部分\]
当我们搭建好一整套的nginx集群之后,它就开始了每日繁忙的处理各种http请求了
现在的问题是,我们怎么才能确定所有的nginx服务都运转正常呢?难道每天24小时盯着页面和日志嘛?当然是不可能的,这就要依赖监控技术了
首先 无论你现在从事运维行业 处于哪一个阶段 , 监控都是最重要的核心工作内容之一
说监控是运维的第一核心也不过分
因为 系统的稳定运行 决定了运维的最高价值,而监控 是保证系统稳定的第一步 (也就是发现问题)
在运维行业流行这样一句话
您在一家企业中 如果真的把监控做到 100%到位了,什么样的问题都能即时的发现 并 预警(报警系统 跟 监控系统 虽然是一体工作的, 但是从技术和集群角度讲 是分开的 不可混为一谈 后面会谈到报警)
那么 这家企业的运维工程师们就成了最幸福的人,每天来了 就一件事 打开监控图 看看有什么问题 然后各种去跟开发较真儿 ^\_^
(实际的现况是 绝大部分公司企业 别说100%监控了 ,就连能达到50%程度的 都少之又少 ,所以 有大量空间去提高)
这句话说的有点偏激,但是也有一部分道理,它充分体现出了 监控对整个运维体系 集群架构的 核心作用
所以说 对于监控 我们绝对不可等闲视之
\[讲一讲经典老牌监控 Nagios\]
Nagios 经典老牌子监控,伴随着一代运维工程师们一路成长,即便到了现在 也广泛在企业中使用
虽然现如今的新监控产品 层出不穷,但是Nagios始终有这一席之地 除了工程师们的情怀以外, 还有什么因素呢?
Nagios有三个特点决定了它屹立不倒的优势
第一: Nagios跟其他监控产品比起来 是部署和配置最便捷 没有之一,且最容易入门的开源监控产品. 企业的老总们 最喜欢的就是省时快速的完成工作 高大上的技术方案对老总来说如浮云, 从成本节约的角度 -> 光从节约员工时间成本来说 Nagios在这方面就无可替代
第二: Nagios对于各种基础服务层面的监控 就是两个字 "完善" ,这得益于 Nagios的很多对于监控项目的基本计算方式都十分的直接有效,且非常符合一般人们对于"监控" 的实现理念.
第三: 新的监控产品 虽然很多, 但是这里有一个奇怪现象: 一般企业中面试运维工程师/架构师 , 到了监控这里 不问别的 就爱问 Nagios相关的问题 (记得我之前 就两次被面试官问道同一个Nagios问题 : 请你解释一下, Nagios 和 NRPE的工作模式和关系 .. ), 而像现如今 炒的很热的 Zabbix 和 Prometheus 从来没有被面试官问到过,连提都不提。 说到这里 大米哥个人认为 是由于Nagios对于各个企业来说,已经是用来考核一个合格的运维工程师的基本素养的指标了
\[Nagios的两种核心工作模式\]
nagios的第一种工作模式: 远程直连采集 工作模式
我们来看下面的一张图
![](assets/1593412758-12b276e96d30b6b14b17aee1cada2104.png)
上面这张图 解释Nagios的第一种工作模式
<远程直连采集 工作模式>
什么意思呢? Nagios的监控服务器端 需要采集被监控机器的 数据
而被监控机器上的一些数据 例如 :
IP地址通不通
端口通不通
HTTP页面是否可以正常返回200
等等 例如这样的监控数据, 我们称它们为 远程直连可获取 型的数据
这样一来,对于Nagios服务端来说,就很轻松的 直连上去 就能获取需要的监控数据了
比如:如果要知道一个被监控机器 是不是正常连着网呢, 那就直接发送个ping (icmp)上去就知道了
如果想知道一个被监控机器 上面的nginx页面是不是正常工作呢, 那就直接发送个 curl (GET) 上去就知道了
这就是Nagios的第一种工作模式: 远程直连采集
* * *
接下来咱们来讲讲 Nagios第二种工作模式: 桥接间接采集
我们来看下面一张图
![](assets/1593412758-7bda9f5b8d56a208ea471de6d19db171.png)
上面这种图 需要采集的监控数据 例如
CPU负载,硬盘剩余,进程存在 等等 , 类似这样的数据 本身并不是一个"服务"
什么意思呢? 好比硬盘剩余多少,这是一项客户端Linux系统上的自身的状态
本身不像 SSH服务一样 可以被外界直接访问到 ,如果nagios服务端 想获取客户端硬盘状况
没有办法直接从网络连上去获取,那怎么办呢?
这就要提到 Nagios的一个扩展功能 , NRPE组件了
请看如下这张图
![](assets/1593412758-55f53195003b3acced4ff949dac89588.png)
有了nagios NRPE组件后, 其在客户端上 先收集客户端硬盘状况信息
然后 再由Nagios服务端 连接NRPE来获取该监控数据 这样的方式 就称作桥接方式获取
到这里,Nagios的两种最重要的获取监控数据的模型 我们大家就知道怎么回事了
下一个小节起 咱们正式开始安装Nagios & NRPE
请先做好Linux下时间同步
接下来 Centos7 安装repl ,之后直接就可以安装 nagios , nagos-plugin , nrpe
nagios本身不带web server, 所以我们安装 httpd (apache)来实现webserver
安装完毕后,nagios会自动将需要的配置文件 加入到httpd中去
```sql
yum -y install epel-release
yum install httpd
yum install nagios* nrpe
```
之后 我们把两个服务都启动
```sql
systemctl start httpd ; systemctl start nagios
mkdir /var/www/html ; chmod -R 777 /var/www/*
```
然后查看一下 httpd启动端口, 以及 nagios进程
nagios启动后并没有端口 而是以cgi后端进程的方式启动
![](assets/1593412758-ee35303db368046030e19c75e79484bc.png)
启动之后 我们来设置一下nagios的初始登录密码
在安装好的Nagios服务端上, 我们先找到如下的路径
(注意:这里的配置路径 是遵循Centos7.x yum安装的形式 ,如果是源代码安装nagios 路径会略有不同)
如下便是 我们要找到的配置路径 可以看到已经有好多以cfg结尾的默认配置文件了
不过 这些其实都是一些自带的模板 我们当前用不上,我们先关注 localhost.cfg
\[root@server01 nagios\]# cd /etc/nagios/objects/
commands.cfg localhost.cfg switch.cfg timeperiods.cfg
contacts.cfg printer.cfg templates.cfg windows.cfg
接下来咱们先学习 如何在Nagios中定义"节点" , 这是重要的第一步
什么是定义节点呢? 其实就是 先把每一个需要被监控的机器 初步加进来
我们再localhost.cfg模板中 可以看到如下这样的配置
```plain
# Define a host for the local machine
define host{
use linux-server ; Name of host template to use
; This host definition will inherit all variables that are defined
; in (or inherited by) the linux-server host template definition.
host_name localhost
alias localhost
address 127.0.0.1
}
```
这个是nagios 安装好以后, 自定义的第一个节点,其实也就是 nagios机器本身 (127.0.0.1)
define host 是对一个被监控节点的整机定义 , 且每一个被监控的主机(节点) 都需要挨个这样定义才可以
接下来 我们把上面这一段 复制一下 变成如下的样子
我们添加 除去本机以外的 第一台被监控机器
```php
define host{
use linux-server ; Name of host template to use
; This host definition will inherit all variables that are defined
; in (or inherited by) the linux-server host template definition.
host_name server02.example.com ; 被监控节点 起一个名字 是唯一标识符号, 不可以重复, 后面会被反复的调用,名字 可以随便取,建议FQDN
alias server02
address 192.168.100.108 ; IP是多少 ,定义是多
}
```
这里需要说明一下, use字段这里先不要动,这是一个模块的定义,因为有其他的连带关系 如果随便修改会造成报错
我们就沿用已有的 linux-server这个模块即可,后面我们会讲到这里
接下来 host\_name , 重要的关键字, 给一台需要被监控的机器 起个名字, 这个名字是作为其在nagios整个监控中的 唯一标识符
并不仅仅是个名字而已, 后面会大量被其他地方调用, 所以这里 我们就严格按照 被监控机器的 FQDN来设置
alias 这里就只是个 节点的别名了,可以随意修改成你想起的名字
最后, address这里 又一个重要的关键字, 就是被监控节点的 IP地址设置, nagios本身并不具备 DNS解析的能力
设置的host\_name 必须要有真实对应的 IP地址, 不然nagios是找不到 被监控机器的
添加好上面这一段以后, 重启nagios,不需要重启 httpd
```coffeescript
[root@server01 objects]# service nagios restart
Redirecting to /bin/systemctl restart nagios.service
```
(注意 如果有语法错误的话,重启会造成失败)
接下来 我们来到nagios的页面 刷新以后,我们会看到 刚刚添加的这一台机器
以灰色显示在下面
灰色是机器被刚刚新加入nagios的时候,会处在一个 PENDING的阶段(UP)
也就是说 nagios目前仅仅是添加了这个节点,还没有获取到监控数据
过一小会 就会转变状态了
![](assets/1593412758-b6662cfcee1b78e986363d4846efe291.png)
然后我们再次刷新页面 就可以看到如下了
被监控机器 由灰色 转变为 绿色,说这个机器已经被监控起来了 并且目前是正常的
define\_host添加一个新节点后,其实就默认加入了 对这一个节点的 ping监控,机器是不是通的
(注意,如果你的配置文件中 IP地址写错了,或者这台机器 目前本身就ping不通,那么这里会显示红色,进入报警状态)
我们会定义节点之后, 我们继续把集群里的其他的 机器 都分别加上监控
```plain
define host{
use linux-server ; Name of host template to use
; This host definition will inherit all variables that are defined
; in (or inherited by) the linux-server host template definition.
host_name server02.example.com
alias server02
address 192.168.100.108
}
define host{
use linux-server ; Name of host template to use
; This host definition will inherit all variables that are defined
; in (or inherited by) the linux-server host template definition.
host_name server03.example.com
alias server03
address 192.168.100.109
}
define host{
use linux-server ; Name of host template to use
; This host definition will inherit all variables that are defined
; in (or inherited by) the linux-server host template definition.
host_name server04.example.com
alias server04
address 192.168.100.110
}
```
得到如下的监控图
![](assets/1593412758-fa87e75d882475450afddf7795b6a59a.png)
掌握了 Nagios配置的第一步 ,也就是监控节点的定义
有了这个好的开始,就可以继续向下推进了