使用salt-stack部署prometheus结合grafana画图使用

使用salt-stack部署prometheus结合grafana画图使用


整体结构

[root@master prod]# tree prometheus/
prometheus/
├── files
│   ├── grafana-7.3.4-1.x86_64.rpm
│   ├── install.sh.j2
│   ├── node_exporter-1.3.0.linux-amd64.tar.gz
│   ├── node_exporter.service.j2
│   ├── node_exporter.yml
│   ├── prometheus-2.31.1.linux-amd64.tar.gz
│   ├── prometheus.service.j2
│   └── prometheus.yml.j2
├── grafana.sls
├── node_exporter.sls
└── prometheus.sls

1 directory, 11 files
[root@master prod]# 

所用变量

[root@master prod]# cat /srv/salt/pillar/prod/prometheus.sls 
prometheus_install_dir: /usr/local/prometheus
prometheus_version: 2.31.1
prometheus_port: 9100
localhosts:
  - 192.168.200.154
node_exporter_install_dir: /usr/local/node_exporter
node_exporter_version: 1.3.0



[root@master prod]# cat /srv/salt/pillar/prod/top.sls 
  prod:
    'node1':
      - prometheus

    'node2':
      - prometheus
[root@master prod]# 

1. prometheus服务端部署

1.1 prometheus状态文件

[root@master prometheus]# cat prometheus.sls 
unzip-prometheus:
  archive.extracted:
    - name: /usr/local
    - source: salt://prometheus/files/prometheus-{{ pillar['prometheus_version'] }}.linux-amd64.tar.gz
    - if_missing: /usr/src/prometheus-{{ pillar['prometheus_version'] }}.linux-amd64

{{ pillar['prometheus_install_dir'] }}:
  file.symlink:
    - target: {{ pillar['prometheus_install_dir'] }}-{{ pillar['prometheus_version'] }}.linux-amd64
    - require:
      - archive: unzip-prometheus

install-prometheus:
  cmd.script:
    - name: salt://prometheus/files/install.sh
    - require:
      - archive: unzip-prometheus
    - unless: test -d  {{ pillar['prometheus_install_dir'] }}

{{ pillar['prometheus_install_dir'] }}/prometheus.yml:
  file.managed:
    - source: salt://prometheus/files/prometheus.yml.j2
    - template: jinja
    - user: root
    - group: root
    - mode: '0644'
    

/usr/lib/systemd/system/prometheus.service:
  file.managed:
    - source: salt://prometheus/files/prometheus.service.j2
    - template: jinja

prometheus.service:
  service.running:
    - enable: true
    - reload: true
    - watch:
      - file: {{ pillar['prometheus_install_dir'] }}/prometheus.yml
[root@master prometheus]# 

1.2 Prometheus,service状态文件

[root@master prometheus]# cat files/prometheus.service.j2 
[Unit]
Description=The Prometheus Server
After=network.target

[Service]
Restart=on-failure
ExecStart={{ pillar['prometheus_install_dir'] }}/prometheus --config.file={{ pillar['prometheus_install_dir'] }}/prometheus.yml
RestartSec=15s

[Install]
WantedBy=multi-user.target
[root@master prometheus]# 

1.3prometheus, prometheus.yml.j2文件

[root@master prometheus]# cat files/prometheus.yml.j2 
# my global config
global:
  scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
  evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
  # scrape_timeout is set to the global default (10s).

# Alertmanager configuration
alerting:
  alertmanagers:
    - static_configs:
        - targets:
          # - alertmanager:9093

# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:
  # - "first_rules.yml"
  # - "second_rules.yml"

# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:
  # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
  - job_name: "prometheus"

    # metrics_path defaults to '/metrics'
    # scheme defaults to 'http'.

    static_configs:
      - targets: {% for localhost in pillar['localhosts'] %}   ['{{ localhost }}:{{ pillar['prometheus_port'] }}']
{% endfor %}
[root@master prometheus]# 

1.4 prometheus.sh.j2状态文件

[root@master prometheus]# cat files/prometheus.sh.j2 
./prometheus --config.file=prometheus.yml
[root@master prometheus]# 

2 node_exporter客户端部署

2.1 node_exporter.sls状态文件

[root@master prometheus]# cat node_exporter.sls 
unzip-node_exporter:
  archive.extracted:
    - name: /usr/local
    - source: salt://prometheus/files/node_exporter-{{ pillar['node_exporter_version'] }}.linux-amd64.tar.gz
    - if_missing: /usr/local/node_exporter-{{ pillar['node_exporter_version'] }}.linux-amd64

/usr/local/node_exporter:
  file.symlink:
    - target: {{ pillar['node_exporter_install_dir'] }}-{{ pillar['node_exporter_version'] }}.linux-amd64
    - require:
      - archive: unzip-node_exporter

{{ pillar['node_exporter_install_dir'] }}/node_exporter.yml:
  file.managed:
    - source: salt://prometheus/files/node_exporter.yml
    - user: root
    - group: root
    - mode: '0644'
    

/usr/lib/systemd/system/node_exporter.service:
  file.managed:
    - source: salt://prometheus/files/node_exporter.service.j2
    - template: jinja

node_exporter.service:
  service.running:
    - enable: true
    - reload: true
    - watch:
      - file: {{ pillar['node_exporter_install_dir'] }}/node_exporter.yml
[root@master prometheus]# 

2.2 node_exporter.service.j2状态文件

[root@master prometheus]# cat files/node_exporter.service.j2 
[unit]
Description=The node_exporter Server
After=network.target

[Service]
ExecStart={{ pillar['node_exporter_install_dir'] }}/node_exporter
Restart=on-failure
RestartSec=15s
SyslogIdentifier=node_exporter

[Install]
WantedBy=multi-user.target
[root@master prometheus]# 

3 grafana部署

grafana状态文件

[root@master prometheus]# cat grafana.sls 
/usr/src/grafana-7.3.4-1.x86_64.rpm: 
  file.managed:
    - source: salt://prometheus/files/grafana-7.3.4-1.x86_64.rpm

install-grafana:
  cmd.run:
    - name: yum -y install  /usr/src/grafana-7.3.4-1.x86_64.rpm 
    - unless: rpm -qa grafana

grafana-service:
  service.running:
    - name: grafana-server
    - enable: true
    - require:
      - install-grafana 
[root@master prometheus]# 

4 grafana结合promethes使用

4.1 使用IP+端口号即可访问grafana web界面

请添加图片描述

4.2 添加数据源

4 grafana结合promethes使用

4.1 使用IP+端口号即可访问grafana web界面

请添加图片描述

4.2 添加数据源

请添加图片描述
请添加图片描述
请添加图片描述

4.3 添加导入模板

请添加图片描述
请添加图片描述
请添加图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值