Prometheus自定义监控部署

参考官方文档:https://prometheus.io/docs/

     Prometheus是一个开源的服务监控系统,它通过HTTP协议从远程的机器收集数据并存储在本地的时序数据库上。 Prometheus通过安装在远程机器上的exporter插件来收集监控数据,这里要用到的是node_exporter,nginx-module-vts模块,nginx-vts-exporter组件:

1.1 用Prometheus细化nginx监控实践,需添加nginx-module-vts模块,通过打开vhost过滤,根据不同的server_name进行流量的统计。
1.2 使用nginx-vts-exporter组件,将收集nginx性能指标的JSON格式数据,并汇总后提供监控接口给Prometheus。

1、server端部署

1.1  软件包准备

复制代码

cd /usr/local/src
wget https://github.com/prometheus/node_exporter/releases/download/v0.14.0/node_exporter-0.14.0.linux-amd64.tar.gz      #客户端,本地都部署
wget https://github.com/prometheus/prometheus/releases/download/v2.3.2/prometheus-2.3.2.linux-amd64.tar.gz              #web端,本地部署
tar xf prometheus-2.3.2.linux-amd64.tar.gz
tar xf mysqld_exporter-0.10.0.linux-amd64.tar.gz

复制代码

1.2  启动node_exporter

复制代码

# 验证以Prometheus本身数据为例,在Web中查询指定表达式及图形化显示查询结果 。
mv prometheus /usr/local
mv node_exporter-0.14.0.linux-amd64 /usr/local/
ln -s /usr/local/prometheus-2.3.2.linux-amd64/ /usr/local/prometheus
ln -s /usr/local/node_exporter-0.14.0.linux-amd64/ /usr/local/node_exporter
cd /usr/local/node_exporter
./node_exporter &
netstat -lntp|grep 9100
http://10.10.16.112:9100/metrics  

复制代码

1.3  启动Prometheus

复制代码

cd /usr/local/prometheus 
vim prometheus.yml
global:
  scrape_interval:     15s
  evaluation_interval: 15s
  external_labels:
      monitor: 'codelab-monitor'
rule_files:
  - 'alert01.rules'    #需定义
scrape_configs:
  - job_name: 'prometheus'
    static_configs:
      - targets: ['localhost:9090']
        labels:
          alias: prometheus

  - job_name: 'linux1'
    static_configs:
      - targets: ['10.10.16.112:9100']    #需安装node_node_exporter
        labels:
          alias: linux-node1

  - job_name: 'linux2'
    static_configs:
      - targets: ['10.10.16.113:9100']    #需安装node_node_exporter
        labels:
          alias: linux-node2
##############################################################

复制代码

  #修改alert配置

复制代码

vim alert01.rules 

groups:
- name: example
  rules:

  # Alert for any instance that is unreachable for >5 minutes.
  - alert: InstanceDown
    expr: up == 0
    for: 5m
    labels:
      severity: page
    annotations:
      summary: "Instance {{ $labels.instance }} down"
      description: "{{ $labels.instance }} of job {{ $labels.job }} has been down for more than 5 minutes."

  # Alert for any instance that has a median request latency >1s.
  - alert: APIHighRequestLatency
    expr: api_http_request_latencies_second{quantile="0.5"} > 1
    for: 10m
    annotations:
      summary: "High request latency on {{ $labels.instance }}"
      description: "{{ $labels.instance }} has a median request latency above 1s (current value: {{ $value }}s)"

复制代码

http://10.10.16.112:9090   #浏览器访问

2、客户端部署

2.1  部署node_exporter

 使用Prometheus Web来验证客户端Node Exporter的数据的采集。内存、CPU负载,磁盘等性能监控

复制代码

wget https://github.com/prometheus/node_exporter/releases/download/v0.14.0/node_exporter-0.14.0.linux-amd64.tar.gz      #客户端部署,可针对硬件层次进行监控
tar xf node_exporter-0.14.0.linux-amd64.tar.gz
mv node_exporter-0.14.0.linux-amd64 /usr/local/
ln -s /usr/local/node_exporter-0.14.0.linux-amd64/ /usr/local/node_exporter
cd /usr/local/node_exporter
./node_exporter &
netstat -lntp|grep 9100
http://10.10.16.113:9100/metrics  #自定义Metrics
  • 拦截器/过滤器:用于统计所有应用请求的情况
  • 自定义Collector: 可以用于统计应用业务能力相关的监控情况

复制代码

2.2  针对mysql进行监控

复制代码

https://www.hi-linux.com/posts/27014.html   #可参考
cd /usr/local/src/
wget https://github.com/prometheus/mysqld_exporter/releases/download/v0.10.0/mysqld_exporter-0.10.0.linux-amd64.tar.gz  #部署在mysql服务器上,node_exporter也部署(参考前面)
tar xf mysqld_exporter-0.10.0.linux-amd64.tar.gz
mv mysqld_exporter-0.10.0.linux-amd64 /usr/local/
ln -s /usr/local/mysqld_exporter-0.10.0.linux-amd64/ /usr/local/mysqld_exporter 

  加载mysqld_exporter 添加配置文件(需要MySQL授权用户)
  mysqld_exporter需要连接到MySQL,需要授权
  mysql> grant replication client, process on *.* to prometheus@"localhost" identified by "123456";
  mysql> grant select on performance_schema.* to prometheus@"localhost";
  cd /usr/local/mysqld_exporter/
  vim .my.cnf
  [client]
  user=prometheus
  password=123456
  nohup ./mysqld_exporter --config.my-cnf=.my.cnf &   #启动

复制代码

2.3  针对nginx进行监控

复制代码

cd /usr/local
git clone git://github.com/vozlt/nginx-module-vts.git   #在nginx主机上操作
./configure --prefix=/usr/local/nginx-1.12.2 --user=nginx --group=nginx --with-http_stub_status_module  --with-http_ssl_module --add-module=/usr/local/nginx-module-vts
make
nginx -s stop
\cp ./objs/nginx /usr/local/nginx/sbin/
vim nginx.conf
http {
     .....
    ###Prometheus配置##   
    vhost_traffic_status_zone;
    vhost_traffic_status_filter_by_host on; #打开vhost过滤
    ###Prometheus配置##
    .....
    server {
     location /status {
               #vhost_traffic_status off;
               vhost_traffic_status_display;
               vhost_traffic_status_display_format html;
        }
    }
    }
########################################################################################################################
wget -c https://github.com/hnlq715/nginx-vts-exporter/releases/download/v0.9.1/nginx-vts-exporter-0.9.1.linux-amd64.tar.gz
tar xf nginx-vts-exporter-0.9.1.linux-amd64.tar.gz

./nginx-vts-exporter -nginx.scrape_timeout 10 -nginx.scrape_uri http://10.10.16.107/status/format/json &    #启动nginx Vhost Traffic
http://10.10.16.107/status   #访问nginx主机各节点状态

复制代码

3、Alertmanager报警实现

  https://blog.qikqiak.com/post/alertmanager-of-prometheus-in-practice/    #参考alertmanager报警实践

3.1  下载alertmanager安装包

wget https://github.com/prometheus/alertmanager/releases/download/v0.12.0/alertmanager-0.12.0.linux-amd64.tar.gz
tar -axvf alertmanager-0.12.0.linux-amd64.tar.gz

3.2  配置alert默认启动yml文件

复制代码

cd alertmanager 
vim simple.yml
  global:
    smtp_smarthost: 'smtp.163.com:25'
    smtp_from: '[email protected]'
    smtp_auth_username: '136112500xx'
    smtp_auth_password: 'xxxxxxxxxx'
    smtp_require_tls: false

  templates:
    - '/usr/local/alertmanager/template/*.tmpl'

  route:
    group_by: ['alertname', 'cluster', 'service']
    group_wait: 30s
    group_interval: 5m
    repeat_interval: 10m
    receiver: default-receiver

  receivers:
  - name: 'default-receiver'
    email_configs:
    - to: '[email protected]'
      html: '{{ template "alert.html" . }}'
      headers: { Subject: "[WARN] 报警邮件test" }

复制代码

3.3  配置报警发送文件样式模板

复制代码

 vim template/alert.tmpl  #template需要创建
{{ define "alert.html" }}
<table>
    <tr><td>报警名</td><td>开始时间</td></tr>
    {{ range $i, $alert := .Alerts }}
        <tr><td>{{ index $alert.Labels "alertname" }}</td><td>{{ $alert.StartsAt }}</td></tr>
    {{ end }}
</table>
{{ end }}

复制代码

3.4  配置alert.html

复制代码

vim alert.html 

{{ define "alert.html" }}
<table>
    <tr><td>报警名</td><td>开始时间</td></tr>
    {{ range $i, $alert := .Alerts }}
        <tr><td>{{ index $alert.Labels "alertname" }}</td><td>{{ $alert.StartsAt }}</td></tr>
    {{ end }}
</table>
{{ end }}

复制代码

3.5  启动alertmanager服务

./alertmanager --config.file=simple.yml   #启动alertmanager

4、Grafana安装

4.1 直接yum安装

yum install https://s3-us-west-2.amazonaws.com/grafana-releases/release/grafana-4.4.3-1.x86_64.rpm    #稳定版
yum install https://s3-us-west-2.amazonaws.com/grafana-releases/release/grafana-5.1.4-1.x86_64.rpm    #最新版

4.2 rpm包安装

 wget https://s3-us-west-2.amazonaws.com/grafana-releases/release/grafana-4.4.3-1.x86_64.rpm
 yum install initscripts fontconfig
 rpm -Uvh grafana-4.4.3-1.x86_64.rpm

4.3 yum源方式安装

复制代码

vim /etc/yum.repos.d/grafana.repo
[grafana]
name=grafana
baseurl=https://packagecloud.io/grafana/stable/el/6/$basearch
repo_gpgcheck=1
enabled=1
gpgcheck=1
gpgkey=https://packagecloud.io/gpg.key https://grafanarel.s3.amazonaws.com/RPM-GPG-KEY-grafana
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt
yum install grafana #安装
yum update grafana  #升级

复制代码

4.4 安装包信息

复制代码

二进制文件: /usr/sbin/grafana-server
init.d 脚本: /etc/init.d/grafana-server
环境变量文件: /etc/sysconfig/grafana-server
配置文件: /etc/grafana/grafana.ini
启动项: grafana-server.service
日志文件:/var/log/grafana/grafana.log
默认配置的sqlite3数据库:/var/lib/grafana/grafana.db

  服务器端图形渲染:
  服务器端映像(png)呈现是一个可选的特性,但在共享可视化时非常有用,例如在警报通知中。
  如果图像缺少文本,请确保已经安装了字体包
  yum install fontconfig
  yum install freetype*
  yum install urw-fonts

复制代码

4.5 grafana升级操作

复制代码

####rpm升级操作
wget https://s3-us-west-2.amazonaws.com/grafana-releases/release/grafana-5.1.4-1.x86_64.rpm
yum install initscripts fontconfig
rpm -Uvh grafana-5.0.1-1.x86_64.rpm  #升级
rpm -Uvh --oldpackage grafana-4.4.3-1.x86_64.rpm  #回退

复制代码

5、Grafana 模板导入

  http://docs.grafana.org/installation/rpm/      #参考rpm安装

复制代码

参考官方文档:
1、yum 安装:yum install https://s3-us-west-2.amazonaws.com/grafana-releases/release/grafana-4.4.3-1.x86_64.rpm    #稳定版
            yum install https://s3-us-west-2.amazonaws.com/grafana-releases/release/grafana-5.1.4-1.x86_64.rpm    #最新版
2、rpm安装: wget https://s3-us-west-2.amazonaws.com/grafana-releases/release/grafana-4.4.3-1.x86_64.rpm
            yum install initscripts fontconfig
            rpm -Uvh grafana-4.4.3-1.x86_64.rpm
3、yum源方式安装:
   vim /etc/yum.repos.d/grafana.repo
   [grafana]
   name=grafana
   baseurl=https://packagecloud.io/grafana/stable/el/6/$basearch
   repo_gpgcheck=1
   enabled=1
   gpgcheck=1
   gpgkey=https://packagecloud.io/gpg.key https://grafanarel.s3.amazonaws.com/RPM-GPG-KEY-grafana
   sslverify=1
   sslcacert=/etc/pki/tls/certs/ca-bundle.crt
   yum install grafana

4、安装包信息:
   二进制文件: /usr/sbin/grafana-server
   init.d 脚本: /etc/init.d/grafana-server
   环境变量文件: /etc/sysconfig/grafana-server
   配置文件: /etc/grafana/grafana.ini
   启动项: grafana-server.service
   日志文件:/var/log/grafana/grafana.log
   默认配置的sqlite3数据库:/var/lib/grafana/grafana.db


5、服务器端图形渲染:
  服务器端映像(png)呈现是一个可选的特性,但在共享可视化时非常有用,例如在警报通知中。
  如果图像缺少文本,请确保已经安装了字体包
  yum install fontconfig
  yum install freetype*
  yum install urw-fonts

复制代码

 通过http://ip:3000访问Grafana Web界面(缺省帐号/密码为admin/admin)

nginx模板引入:https://grafana.com/dashboards/2949  #这里不加赘述,直接引入即可出图。

6、Prometheus监控总结

6.1  做好ntp时间同步

prometheus对系统时间的准确性要求很高,必须保证本机时间与监控主机实时同步:
#Ansible: sync time
00 00 * * * /usr/sbin/ntpdate time.nist.gov >/dev/null 2>&1

6.2  Prometheus各组件说明

       Prometheus生态系统由多个组件组成,它们中的一些是可选的。多数Prometheus组件是Go语言写的,这使得这些组件很容易编译和部署。Prometheus提供多种类型的Exporter用于采集各种不同服务的运行状态。目前支持的有数据库、硬件、消息中间件、存储系统、HTTP服务器、JMX等。

复制代码

Prometheus Server:主要负责数据采集和存储,提供PromQL查询语言的支持。另外还提供查询和 Alert Rule 配置管理。
客户端SDK:官方提供的客户端类库有go、java、scala、python、ruby,其他还有很多第三方开发的类库,支持nodejs、php、erlang等。如client libraries,用于对接 Prometheus Server,可以查询和上报数据.
Push Gateway:支持临时性Job主动推送指标的中间网关。用于批量,短期的监控数据的汇总节点,主要用于业务数据汇报等。
PromDash:使用Rails开发可视化的Dashboard,用于可视化指标数据。
Explorer:它是Prometheus的一类数据采集组件的总称。它负责从目标处搜集数据,并将其转化为Prometheus支持的格式。与传统的数据采集组件不同的是,它并不向中央服务器发送数据,而是等待中央服务器主动前来抓取。如
          node_exporter:会持续不断采集Linux系统中各种操作系统本身相关的监控参数的程序,采集量很大很全,往往默认的采集项就远超过你的实际需求。
Alertmanager:警告管理器,用于告警通知管理,用来进行报警。
Prometheus_cli:命令行工具
其他辅助性工具:多种导出工具,可以支持Prometheus存储数据转化为HAProxy、StatsD、Graphite等工具所需要的数据存储格式

复制代码

6.3  Prometheus的原理

    Prometheus的基本原理是通过HTTP协议周期性抓取被监控组件的状态,任意组件只要提供对应的HTTP接口就可以接入监控。不需要任何SDK或者其他的集成过程。这样做非常适合做虚拟化环境监控系统,比如VM、Docker、Kubernetes等。
输出被监控组件信息的HTTP接口被叫做exporter 。目前互联网公司常用的组件大部分都有exporter可以直接使用,比如Varnish、Haproxy、Nginx、MySQL、Linux系统信息(包括磁盘、内存、CPU、网络等等)。

6.4  Prometheus的服务过程

复制代码

a. Prometheus Daemon负责定时去目标上抓取metrics(指标)数据,每个抓取目标需要暴露一个http服务的接口给它定时抓取。Prometheus支持通过配置文件、文本文件、Zookeeper、Consul、DNS SRV Lookup等方式指定抓取目标。
b. Prometheus采用PULL的方式进行监控,即服务器可以直接通过目标PULL数据或者间接地通过中间网关来Push数据。
c. Prometheus在本地存储抓取的所有数据,并通过一定规则进行清理和整理数据,并把得到的结果存储到新的时间序列中。
d. Prometheus通过PromQL和其他API可视化地展示收集的数据。Prometheus支持很多方式的图表可视化,例如Grafana、自带的Promdash以及自身提供的模版引擎等等。Prometheus还提供HTTP API的查询方式,自定义所需要的输出。
e. PushGateway支持Client主动推送metrics到PushGateway,而Prometheus只是定时去Gateway上抓取数据。
f. Alertmanager是独立于Prometheus的一个组件,可以支持Prometheus的查询语句,提供十分灵活的报警方式。

复制代码

6.5  Prometheus场景介绍

复制代码

Prometheus在记录纯数字时间序列方面表现非常好。它既适用于面向服务器等硬件指标的监控,也适用于高动态的面向服务架构的监控。对于现在流行的微服务,Prometheus的多维度数据收集和数据筛选查询语言也是非常的强大。
Prometheus是为服务的可靠性而设计的,当服务出现故障时,它可以使你快速定位和诊断问题。它的搭建过程对硬件和服务没有很强的依赖关系。
Prometheus不适用的场景:Prometheus它的价值在于可靠性,甚至在很恶劣的环境下,你都可以随时访问它和查看系统服务各种指标的统计信息。 如果你对统计数据需要100%的精确,它并不适用,例如:它不适用于实时计费系统。

复制代码


感谢您的阅读,如果您觉得阅读本文对您有帮助,请点一下“推荐”按钮。本文欢迎各位转载,但是转载文章之后必须在文章页面中给出作者和原文连接

猜你喜欢

转载自blog.csdn.net/mnasd/article/details/86694412