一、Prometheus架构

Prometheus (中文名:普罗米修斯)是由 SoundCloud 开发的开源监控报警系统和时序列数据库(TSDB)。Prometheus 在2016加入 CNCF ( Cloud Native Computing Foundation ),作为在 kubernetes 之后的第二个由基金会主持的项目。 而这里的Prometheus是广义的概念,其包含了一系列组件,如下表:

 1prometheus
 2alertmanager //配置告警阀值相关
 3blackbox_exporter
 4consul_exporter
 5graphite_exporter
 6haproxy_exporter
 7memcached_exporter
 8mysqld_exporter
 9node_exporter //主机性能及硬件指标采集
10pushgateway
11statsd_exporter

而Grafana 是一个前端界面程序,我之前在《Collectd+Influxdb+Grafana打造监控系统》中有提到 。以上这些组件需要配合使用才能实现一套完整的监控系统(也会用一些非prometheus相关的组件,如容器的监控经常会用到cAdvisor)。而本篇重要点讲的是prometheus + node_exporter + grafana 。其架构如下:

prometheus
prometheus

二、node_exporter的安装

node_exporter在主机上的安装上非常简单,打开https://prometheus.io/download/#node_exporter ,下载最新版本并解压到/usr/local/bin目录下即可使用。使用的时候可以不加参数,也可以使用参数,这个根据自己需要进行配置。比如我使用的参数如下:

1/usr/local/bin/node_exporter --collector.systemd \
2--collector.diskstats.ignored-devices=^(ram|loop|fd)d+$ \
3--collector.filesystem.ignored-mount-points=^/(sys|proc|dev|run)($|/) &

启动后,可以看到其采集的相关插件如下

node_exporter
node_exporter

启动后,可以通过如下命令进行验证(也可以浏览器打开验证):

1curl http://127.0.0.1:9100
2curl http://127.0.0.1:9100/metrics  //返回当前取得的信息

同样,node_exporter也可以以容器的方式运行,命令如下:

1docker run -d -p 9100:9100 \
2  -v "/proc:/host/proc:ro" \
3  -v "/sys:/host/sys:ro" \
4  -v "/:/rootfs:ro" \
5  --net="host" \
6  quay.io/prometheus/node-exporter \
7    -collector.procfs /host/proc \
8    -collector.sysfs /host/sys \
9    -collector.filesystem.ignored-mount-points "^/(sys|proc|dev|host|etc)($|/)"

三、prometheus的安装配置

通过https://prometheus.io/download 下载最新的prometheus,通如下方式解压使用:

1tar xvfz prometheus-*.tar.gz
2cd prometheus-*

解压后,可以找到prometheus.yml 配置文件,修改其内容类似如下:

 1global:
 2  scrape_interval:     15s
 3  evaluation_interval: 15s
 4  - job_name: prometheus
 5    static_configs:
 6      - targets: ['localhost:9090']   //prometheus管理地址和端口
 7        labels:
 8          instance: prometheus
 9  - job_name: linux1
10    static_configs:
11      - targets: ['192.168.1.120:9100']   //运行node_exporter主机的连接信息
12        labels:
13          instance: sys1
14  - job_name: linux2
15    static_configs:
16      - targets: ['192.168.1.130:9100']
17        labels:
18          instance: sys2

简单配置后,可以通过如下命令启动 prometheus :

1./prometheus --config.file=prometheus.yml

默认情况下prometheus的数据会保存在./data (flag –storage.tsdb.path参数可以更改路径)目录下。

实际应用时,我们可以把相同的一组应用保存在一个任务里,比如job名为example-random,其中两台主机运行的为生产组主机主机,另一台主机为canary 版本的,我们可以通过group进行区分他们。如下示例:

 1scrape_configs:
 2  - job_name:       'example-random'
 3    # Override the global default and scrape targets from this job every 5 seconds.
 4    scrape_interval: 5s
 5    static_configs:
 6      - targets: ['192.168.1.120:9100', '192.168.1.121:9100']
 7        labels:
 8          group: 'production'
 9      - targets: ['192.168.1.130:9100']
10        labels:
11          group: 'canary'

具体可以查看官方文档:https://prometheus.io/docs/prometheus/latest/getting_started/ ,配置完成并启动后,可以通过如下targets界面查看相关主机,也可以通过选择configuration查看当前的配置。

prometheus-targets
prometheus-targets

四、grafana的安装

grafana的安装需要依赖Golang环境,可以参考 Golang的安装 页面进行go环境的安装。通过如下命令安装grafana:

1wget https://dl.grafana.com/oss/release/grafana-5.4.2-1.x86_64.rpm
2yum localinstall grafana-5.4.2-1.x86_64.rpm
3systemctl daemon-reload
4systemctl enable grafana-server
5systemctl start grafana-server
6# 以下是字体库等相关依赖包
7yum install fontconfig
8yum install freetype*
9yum install urw-fonts

grafana默认用户名密码为admin/admin,如果需要nginx进行反向代理,可以通过如下配置进行配置:

1server {
2        listen       80;
3        server_name  grafana.361way.com;
4        charset utf-8;
5        location / {
6            default_type text/html;
7            proxy_pass http://127.0.0.1:3000;
8        }
9}

编辑配置文件/etc/grafana/grafana.ini ,修改dashboards.json段落下两个参数的值:

1[dashboards.json]
2enabled = true
3path = /var/lib/grafana/dashboards

安装仪表盘JSON模版:

1git clone https://github.com/percona/grafana-dashboards.git
2cp -r grafana-dashboards/dashboards /var/lib/grafana/

通过service grafana-server restart命令重新启动服务,并打开URL进行访问,登陆后可以通过如下步骤配置数据源:

grafana-prometheus-sources
grafana-prometheus-sources

如果是通过Provisioning方式安装的(比如ansible\saltstack等工具通过yaml 文件一键安装的),关于prometheus 项的配置如下:

1apiVersion: 1
2datasources:
3  - name: Prometheus
4    type: prometheus
5    access: proxy
6    url: http://localhost:9090

至此,node_exporter + prometheus + grafana 三者的整合就结束了,后面如果要进行告警配置,还需要整合alertmanager 并配置相关rule,这个后面再单独写吧。