Prometheus、node Exporters、grafana 的安装与使用

栏目: 数据库 · 发布时间: 5年前

内容简介:node-exporter 9100alertmanager 9093prometheus 9090

端口分配说明:

node-exporter 9100

alertmanager 9093

prometheus 9090

Grafana 3000

1.首先安装docker:

安装完成后, 使用 docker 分别拉取 node-exporter,prometheus,grafana最新版镜像

# docker pull prom/node-exporter
# docker pull prom/prometheus
# docker pull grafana/grafana
# docker pull prom/alertmanager

2.运行 node-exporter

指定端口为9100 , --net=host,这样该容器就会使用主机的网卡,而不会生成自己的虚拟网卡, Prometheus Server 可以直接与 Node Exporter 通信

sudo docker run -d -p 9100:9100 \
-v "/proc:/host/proc" \
-v "/sys:/host/sys" \
-v "/:/rootfs" \
--net=host \
prom/node-exporter \
--path.procfs /host/proc \
--path.sysfs /host/sys \
--collector.filesystem.ignored-mount-points "^/(sys|proc|dev|host|etc)($|/)"

输入 docker ps 查看 node-exporter 已经载运行了

Prometheus、node Exporters、grafana 的安装与使用

image.png

打开浏览器 http://localhost:9100/metrics 查看到 metrics 输出

Prometheus、node Exporters、grafana 的安装与使用

image.png

3.运行 Prometheus Server

在 home 目录下新建文件夹来存放配置文件

cd /home
mkdir prometheus
cd prometheus

新建 prometheus.yml 配置文件 :

# Prometheus全局配置项
global:
  scrape_interval:     15s # 设定抓取数据的周期,默认为1min
  evaluation_interval: 15s # 设定更新rules文件的周期,默认为1min
  scrape_timeout: 15s # 设定抓取数据的超时时间,默认为10s
  external_labels: # 额外的属性,会添加到拉取得数据并存到数据库中
   monitor: 'codelab_monitor'


# Alertmanager配置
alerting:
 alertmanagers:
 - static_configs:
   - targets: ["localhost:9093"] # 设定alertmanager和prometheus交互的接口,即alertmanager监听的ip地址和端口
     
# rule配置,首次读取默认加载,之后根据evaluation_interval设定的周期加载
rule_files:
 - "alertmanager_rules.yml"
 - "prometheus_rules.yml"

# scape配置
scrape_configs:
- job_name: 'prometheus' # job_name默认写入timeseries的labels中,可以用于查询使用
  scrape_interval: 15s # 抓取周期,默认采用global配置
  static_configs: # 静态配置
  - targets: ['localhost:9100'] # prometheus所要抓取数据的地址,即instance实例项

- job_name: 'example-random' #个人测试用接口
  static_configs:
  - targets: ['localhost:8080']

新建报警规则文件 alertmanager_rules.yml和 prometheus_rules.yml

alertmanager_rules.yml

groups:
 - name: test-rules
   rules:
   - alert: InstanceDown # 告警名称
     expr: up == 0 # 告警的判定条件,参考Prometheus高级查询来设定
     for: 2m # 满足告警条件持续时间多久后,才会发送告警
     labels: #标签项
      team: node
     annotations: # 解析项,详细解释告警信息
      summary: "{{$labels.instance}}: has been down"
      description: "{{$labels.instance}}: job {{$labels.job}} has been down "
      value: {{$value}}

prometheus_rules.yml

groups:
- name: example   #报警规则的名字
  rules:

  # Alert for any instance that is unreachable for >5 minutes.
  - alert: InstanceDown     #检测job的状态,持续1分钟metrices不能访问会发给altermanager进行报警
    expr: up == 0
    for: 1m    #持续时间
    labels:
      serverity: page
    annotations:
      summary: "Instance {{ $labels.instance }} down"
      description: "{{ $labels.instance }} of job {{ $labels.job }} has been down for more than 5 minutes."


  - alert: "it's has problem"  #报警的名字
    expr: "test_tomcat{exported_instance="uat",exported_job="uat-app-status",host="test",instance="uat",job="uat-apps-status"} -  test_tomcat{exported_instance="uat",exported_job="uat-app-status",host="test",instance="uat",job="uat-apps-status"} offset 1w > 5"   # 这个意思是监控该表达式查询出来的值与一周前的值进行比较,大于5且持续10m钟就发送给altermanager进行报警
    for: 1m  #持续时间
    labels:
      serverity: warning
    annotations:
      summary: "{{ $labels.type }}趋势增高"
      description: "机器:{{ $labels.host }} tomcat_id:{{ $labels.id }} 类型:{{ $labels.type }} 与一周前的差值大于5,当前的差值为:{{ $value }}"    #自定义的报警内容

运行普罗米休斯:

docker run -d -p 9090:9090 --name prometheus --net=host -v /home/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus

打开 http://localhost:9090/graph

Prometheus、node Exporters、grafana 的安装与使用

image.png

运行成功!

3.运行 Alertmanager :

安装golang:

sudo apt-get install golang-go

关于Alertmanager 查看: https://www.jianshu.com/p/239b145e2acc

在当前目录下新建 alertmanager 存放Alertmanager的配置文件:

mkdir alertmanager
cd alertmanager

新建 alertmanager.yml 配置文件:

邮箱配置改为自己的.

# 全局配置项
global: 
  resolve_timeout: 5m #处理超时时间,默认为5min
  smtp_smarthost: 'smtp.sina.com:25' # 邮箱smtp服务器代理
  smtp_from: '******@sina.com' # 发送邮箱名称
  smtp_auth_username: '******@sina.com' # 邮箱名称
  smtp_auth_password: '******' # 邮箱密码或授权码
  wechat_api_url: 'https://qyapi.weixin.qq.com/cgi-bin/' # 企业微信地址


# 定义模板信心
templates:
  - 'template/*.tmpl'

# 定义路由树信息
route:
  group_by: ['alertname'] # 报警分组依据
  group_wait: 10s # 最初即第一次等待多久时间发送一组警报的通知
  group_interval: 10s # 在发送新警报前的等待时间
  repeat_interval: 1m # 发送重复警报的周期 对于email配置中,此项不可以设置过低,否则将会由于邮件发送太多频繁,被smtp服务器拒绝
  receiver: 'email' # 发送警报的接收者的名称,以下receivers name的名称

# 定义警报接收者信息
receivers:
  - name: 'email' # 警报
    email_configs: # 邮箱配置
    - to: '******@163.com'  # 接收警报的email配置
      html: '{{ template "test.html" . }}' # 设定邮箱的内容模板
      headers: { Subject: "[WARN] 报警邮件"} # 接收邮件的标题
    # 第三方开发配置
     #webhook_configs: # webhook配置
    #- url: 'http://127.0.0.1:5001'
    #send_resolved: true
    #wechat_configs: # 企业微信报警配置
    #- send_resolved: true
     #to_party: '1' # 接收组的id
      #agent_id: '1000002' # (企业微信-->自定应用-->AgentId)
      #corp_id: '******' # 企业信息(我的企业-->CorpId[在底部])
      #api_secret: '******' # 企业微信(企业微信-->自定应用-->Secret)
      #message: '{{ template "test_wechat.html" . }}' # 发送消息模板的设定
# 一个inhibition规则是在与另一组匹配器匹配的警报存在的条件下,使匹配一组匹配器的警报失效的规则。两个警报必须具有一组相同的标签。 
inhibit_rules: 
  - source_match: 
     severity: 'critical' 
    target_match: 
     severity: 'warning' 
    equal: ['alertname', 'dev', 'instance']

注:

1)repeat_interval配置项,对于email来说,此项不可以设置过低,否则将会由于邮件发送太多频繁,被smtp服务器拒绝

.tmpl模板的配置:

新建template文件夹存放模板:

mkdir template
cd template

新建发送邮件模板 test.tmpl:

{{ define "test.html" }}
<table border="1">
        <tr>
                <td>报警项</td>
                <td>实例</td>
                <td>报警阀值</td>
                <td>开始时间</td>
        </tr>
        {{ range $i, $alert := .Alerts }}
                <tr>
                        <td>{{ index $alert.Labels "alertname" }}</td>
                        <td>{{ index $alert.Labels "instance" }}</td>
                        <td>{{ index $alert.Annotations "value" }}</td>
                        <td>{{ $alert.StartsAt }}</td>
                </tr>
        {{ end }}
</table>
{{ end }}

注:

上述Labels项,表示prometheus里面的可选label项。annotation项表示报警规则中定义的annotation项的内容。

告警信息生命周期的3中状态

1)inactive:表示当前报警信息即不是firing状态也不是pending状态

2)pending:表示在设置的阈值时间范围内被激活的

3)firing:表示超过设置的阈值时间被激活的

运行 alertmanager:

sudo docker run -d -p 9093:9093 --net=host -v /home/prometheus/alertmanager/alertmanager.yml:/etc/alertmanager/config.yml --name alertmanager prom/alertmanager

打开 http://localhost:9093/#/alerts

Prometheus、node Exporters、grafana 的安装与使用

image.png

运行成功!

4.运行 Grafana

sudo docker run -d -i -p 3000:3000 \
-e "GF_SERVER_ROOT_URL=http://grafana.server.name" \
-e "GF_SECURITY_ADMIN_PASSWORD=admin" \
--net=host \
grafana/grafana

-e "GF_SECURITY_ADMIN_PASSWORD=secret 指定了 Grafana admin用户密码 admin。

打开 http://localhost:3000

输入用户名 admin 密码 admin

Prometheus、node Exporters、grafana 的安装与使用

登录后,Grafana 将引导我们配置 Data Source。

Prometheus、node Exporters、grafana 的安装与使用

image.png

添加一个数据源,将Grafana和Prometheus关联起来

Prometheus、node Exporters、grafana 的安装与使用

image.png

Prometheus、node Exporters、grafana 的安装与使用

image.png

回到首页,接下来需要添加一个 dashboard

Prometheus、node Exporters、grafana 的安装与使用

image.png

Prometheus、node Exporters、grafana 的安装与使用

image.png


以上所述就是小编给大家介绍的《Prometheus、node Exporters、grafana 的安装与使用》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

腾讯之道

腾讯之道

艾永亮、刘官华、梁璐 / 机械工业出版社 / 2016-7-19 / 59

放眼整个中国乃至全球,腾讯都是一家成功的互联网企业,它代表中国企业在世界互联网版图中竖起了一面高高的旗帜。腾讯为何能取得如此大的成就,它的成功方法和商业逻辑是什么?你是不是和无数中国企业和商界人士一样,都想向腾讯取取经,但是又不得其门而入? 腾讯一直以低调、务实著称,所 以腾讯及其内部员工都极少对外界分享他们的经验;加之腾讯的商业模式多元、业务繁多且交叉、体量又极其庞大,使得从外部来系统研究......一起来看看 《腾讯之道》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

在线进制转换器
在线进制转换器

各进制数互转换器