一 .主流运维监控工具:

Prometheus(https://prometheus.io/docs/introduction/overview/)、

Zabbix(https://www.zabbix.com/)

Nagios(https://www.nagios.org/)

Cacti(https://www.cacti.net/)

Open-falcon(http://open-falcon.org/)

Gangia(http://ganglia.info/)

Graylog(https://www.graylog.org/)

Zenoss Core(https://www.zenoss.com/)

Graphite(https://graphiteapp.org/)

Graylog(https://www.graylog.org/)

在生产环境里用到最多的三种分别是Prometheus、Zabbix、Nagios,下面分别列出这三种监控神器的优缺点:

Prometheus

简介:

是一套开源的监控系统,将所有信息存储为时间序列数据,因此实现一种Profiling(资料收集)监控方式,实时分析系统运行的状态,执行时间,调用次数等,以找到系统的热点,为性能优化提供依据,其本身的功能在于数据的提取,不具备监控功能,但是依靠它周边组件实现了强大的监控功能。

优点:

易管理性,核心部分只有一个单独的二进制文件,可直接在本地工作,不依赖于分布式存储;

业务数据相关性,监控服务的运行状态,从而让用户获取服务和应用内部真正的运行状态;

高效易伸缩,单一Prometheus可以处理数以百万的监控指标;每秒处理十万的数据点;提供多种语言的客户端SDK(SDK接入协议);

良好的可视化,自带有Prometheus UI,还提供了一个独立的基于Rudy   on Rails的Dashboard解决方案Promdash。

缺点:

对于Prometheus的使用者来说,所有的公制端点都必须是可达的,这意味着一个更加复杂的安全网络配置;

在大型的部署中,扩展性可能达不到预期的效果,所以建议收集短期的工作指标;

因为其主要设计目标之一是 操作简单性,所以限制了监控系统可能失效模式数量,遵循着单一原则,Prometheus只局限于单个节点,因为集群带来了额外的操作复杂性,使用单个节点不那么复杂,但是对可以由Prometheus监控的度量指标有着严格的限制。

Zabbix

简介:

是一个基于web界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案。

优点:

支持多平台的企业级分布式开源监控软件;

安装部署简单,多种数据采集插件灵活集成,功能强大可实现复杂多条件告警;

自带画图功能,得到的数据可以绘成图形,提供多种API接口,支持调用脚本,出现问题时可自动远程执行命令。

缺点:

项目批量修改不方便,中文资料少,服务支持有限

入门容易,但是深层次需求需要非常熟悉Zabbix并进行大量的二次定制开发,难度较大;

系统级别报警、报警邮件、自定义项目报警需要自己设置,过程繁琐,缺少数据汇总功能,数据报表也需要进行二次开发。

Nagios

简介:

是一款开源的电脑系统和网络监视工具,能有效监控windows、linux、unix的主机状态,交换机路由器等网络设置,打印机等。

优点:

出错的服务器、应用和设备会自动重启,自动日志滚动;

配置灵活,可自定义shell脚本,通过分布式监控模式;

支持以冗余方式进行监控主机,报警设置等。

缺点:

事件控制台功能弱,插件易用性差,对性能,,流量等指标的处理差;

无历史数据难追查故障,配置复杂。

因为公司的业务使用了k8s、docker、mysql、redisconsul、rabbitmq、ansible等组件,对比各种监控系统的优缺点最后决定使用prometheus作为公司的主流监控系统。

二.详细探究Prometheus

Prometheusan安装部署(这里采用源码编译安装)

下载Prometheus server

# wget https://github.com/prometheus/prometheus/releases/download/v2.14.0/prometheus-2.14.0.linux-amd64.tar.gz

解压并进入对应的文件夹

 # tar xvzf prometheus-2.14.0.linux-amd64.tar.gz

# mv prometheus-2.14.0.linux-amd64 /usr/local/

# cd /usr/local/prometheus-2.14.0.linux-amd64/

在后台启动Prometheus服务

# nohup ./prometheus &     注:nohup ./prometheus是在前台运行

此时,prometheus服务已经在后台运行,暴露的端口号为9090(address=0.0.0.0:9090),可以直接在浏览器打开localhost:9090查看简易控制台

nagios和smokeping结合 nagios和prometheus比较_linux


三.结合Grafana更强大、美观的展示数据

Grafana的安装部署(https://grafana.com/)

# wget https://dl.grafana.com/oss/release/grafana-6.5.0-1.x86_64.rpm

# sudo yum localinstall grafana-6.5.0-1.x86_64.rpm

# cat /etc/grafana/grafana.ini

# sudo /bin/systemctl start grafana-server.service

此时grafana服务已经启动,可以直接在浏览器里打开http://localhost:3000开始体验grafana,但是当前监测到的是Prometheus服务,并没有监测到主机的关键度量指标状态。

nagios和smokeping结合 nagios和prometheus比较_linux_02


四.安装node_exporter实现对主机度量指标状态的监控

安装node_exporter(下载地址:https://github.com/prometheus/node_exporter/releases)

# wget https://github.com/prometheus/node_exporter/releases/download/v0.18.1/node_exporter-0.18.1.linux-amd64.tar.gz 

进入对应的文件夹:

# tar xfvz node_exporter-0.18.1.linux-amd64.tar.gz

# nohup ./node_exporter &

此时可以直接在浏览器打开http://localhost:9100查看node_exporter界面 

nagios和smokeping结合 nagios和prometheus比较_linux_03


在prometheus.yml配置文件中添加node_exporter的相关配置信息

nagios和smokeping结合 nagios和prometheus比较_nagios和smokeping结合_04


此时在grafana界面中将Node_exporter主机的信息导进去,为了更直观的监控主机的内存、cpu、磁盘、网络需要在grafana模板里导入仪表盘。

导入监控内存、cpu、磁盘、网络的模板:

nagios和smokeping结合 nagios和prometheus比较_ios_05


nagios和smokeping结合 nagios和prometheus比较_ios_06


nagios和smokeping结合 nagios和prometheus比较_数据_07


nagios和smokeping结合 nagios和prometheus比较_ios_08


nagios和smokeping结合 nagios和prometheus比较_数据_09


最后的效果:

nagios和smokeping结合 nagios和prometheus比较_ios_10


五.实现同时监控多台主机(目标主机:192.168.2.235 192.168.2.102 192.168.2.93)

1.分别在每台主机上安装node_exporter

编辑配置文件如下:

nagios和smokeping结合 nagios和prometheus比较_ios_11


现在可以在浏览器中打开192.168.2.85:9090/targets看到目标主机已经被成功监测到了(状态为up状态为正常,为down状态异常)

nagios和smokeping结合 nagios和prometheus比较_linux_12


此时在浏览器中打开192.168.2.85:3000,可以在grafana界面中看到每台主机相关参数的使用率

nagios和smokeping结合 nagios和prometheus比较_数据_13


这种每台分别安装node_exporter的方式只适用于监控目标较少的的情况下,当主机的数量过多时,这种操作很耗时不推荐。

2.ansible批量安装node_exporter(也可以采用脚本)

安装ansible

# yum install ansible

查看ansible的版本

# ansible --version

查看ansible的安装位置

# whereis ansible

利用ansible批量安装Node_exporter的前提ansible主机可以连接到目标主机,如果不采用免密通信,ansible主机在向目标主机进行操作时,需要密码,下面实现ansible主机和目标主机免密通信,在ansible主机上进行如下的操作:

# ssh-keygen -t rsa

# ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.2.235

nagios和smokeping结合 nagios和prometheus比较_数据_14


此时ansible主机再对目标主机进行操作的时候已经是免密的,那么问题又来了,我们使用ansible主机批量安装Node_exporter的目标是减轻运维工作量,如果目标主机过多的时候像这样一台一台的去实现免密通信反而会增加我们的工作量,所以在这里使用ansible批量ssh互信

(1).首先关闭公钥认证

①.[defaults]

host_key_checking = False

②.直接设置环境变量

export ANSIBLE_HOST_KEY_CHECKING=False

(2).使用ssh-key产生公钥和私钥

# ssh-keygen -t rsa -b 2048 -P "1qaz-pl," -f /root/.ssh/id_rsa

(3).添加主机信息到hosts文件中

nagios和smokeping结合 nagios和prometheus比较_linux_15


(4).编写Playbook剧本文件

nagios和smokeping结合 nagios和prometheus比较_nagios和smokeping结合_16


(5).运行Playbook剧本文件

:/etc/ansible # ansible-playbook -i hosts ssh.yml

nagios和smokeping结合 nagios和prometheus比较_linux_17


(6).现在可以检验一下免密通信是否配成功了

nagios和smokeping结合 nagios和prometheus比较_数据_18


此时用ansible来批量安装node_exporter就会简单的多

编写批量安装的 ansible-playbook剧本文件node.yml如下所示:

---

- hosts: test

user: root

gather_facts: false

tasks:

- name: 安装node_exporter

unarchive: src=/usr/local/node_exporter-0.18.1.linux-amd64.tar.gz dest=/opt/

- name: 添加node_exporter服务

copy: src=/usr/local/node_exporter-0.18.1.linux-amd64/node_exporter.service dest=/usr/local

- name: 设置开机自动启动

shell: systemctl enable node_exporter.service

- name: 启动服务

shell: systemctl start node_exporter.service

nagios和smokeping结合 nagios和prometheus比较_ios_19


执行node.yml剧本文件如下:

# ansible-playbook node.yml -i /etc/ansible/hosts

nagios和smokeping结合 nagios和prometheus比较_数据_20


检验批量安装有没有成功,进入相应主机的/opt、/usr/local查看有没有node_exporter-0.18.1.linux-amd64和node_exporter.service,可以看到对应的四台主机相对应的目录下都有node_exporter相关的信息,这里给出235主机上的结果,其他主机与之相同:

nagios和smokeping结合 nagios和prometheus比较_nagios和smokeping结合_21


六.基于consul的自动发现监控目标,这样就避免了每监控一台机器就修改一次prometheus文件。

下载安装consul

# cd /opt

# mkdir consul

# chmod 777 consul

# cd consul

# wget https://releases.hashicorp.com/consul/1.3.0/consul_1.3.0_linux_amd64.zip

# unzip consul_1.3.0_linux_amd64.zip

# cp consul /usr/local/bin/

# consul version

# nohup consul agent -server -data-dir=/usr/local/consul/ -node=agent-one -bind=192.168.2.85 -bootstrap-expect=1 -client=0.0.0.0 -ui &

# ps -ef | grep consul

浏览器输入http://192.168.2.85:8500出现consul界面说明安装成功:

nagios和smokeping结合 nagios和prometheus比较_linux_22


修改prometheus配置文件,添加如下字段,并重启prometheus服务。

- job_name: 'consul'

consul_sd_configs:

- server: '192.168.2.85:8500'

services: []

relabel_configs:

- source_labels: [__meta_consul_tags]

regex: .dev.

action: keep

nagios和smokeping结合 nagios和prometheus比较_nagios和smokeping结合_23


向consul注册服务

# curl -X PUT -d '{"id": "test1","name": "test1","address": "192.168.2.93","port": 9100,"tags": ["dev"],"checks": [{"http": "http://192.168.2.93:9100/","interval": "5s"}]}' http://localhost:8500/v1/agent/service/registernagios和smokeping结合 nagios和prometheus比较_linux_24

在consul界面中查看。test1.、test2、test3、test4都已经注册过来了


此时在浏览器输入http://192.168.2.85:9090/targets,可以看到向consul注册的服务已经同步到了prometheus。


现在在浏览器输入http://192.168.2.85:3000,添加数据源,覆盖掉之前的9276模板,可以看到已经成功的监测到了目标主机。


七.实现对windows主机的监控(192.168.3.102)

下载wmi_exporter.(windows) (https://github.com/martinlindhe/wmi_exporter/releases)


直接安装以9182做监听端口,在prometheus配置文件中添加如下字段:

- job_name: 'windows'

static_configs:

- targets: ['192.168.3.102:9182']


现在prometheus界面中可以看到windows主机的信息已经同步上来了


最后添加数据源然后在grafana模板里找到监控windows主机的,结果如下所示


八.实现钉钉告警,邮箱告警,企业微信告警,这里grafana有对应的板块,我们可以直接使用。