- 使用salt-stack部署prometheus结合grafana画图使用
- 1. prometheus服务端部署
- 1.1 prometheus状态文件
- 1.2 Prometheus,service状态文件
- 1.3prometheus, prometheus.yml.j2文件
- 1.4 prometheus.sh.j2状态文件
- 2 node_exporter客户端部署
- 2.1 node_exporter.sls状态文件
- 2.2 node_exporter.service.j2状态文件
- 3 grafana部署
- 4 grafana结合promethes使用
- 4.1 使用IP+端口号即可访问grafana web界面
- 4.2 添加数据源
- 4 grafana结合promethes使用
- 4.1 使用IP+端口号即可访问grafana web界面
- 4.2 添加数据源
- 4.3 添加导入模板
整体结构
[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=` 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 添加数据源



