新增部署Prometheus监控工具脚本;更新README.md文件
This commit is contained in:
parent
32e4e8070b
commit
30c8ad0f9a
93
README.md
93
README.md
@ -1,3 +1,92 @@
|
|||||||
# ansible_tools
|
# Ansible 示例
|
||||||
|
## prometheus
|
||||||
|
使用 ansible 部署 Prometheus 监控组件
|
||||||
|
<br/>
|
||||||
|
|
||||||
ansible 脚本工具
|
**参数说明:**
|
||||||
|
`e` :配置文件/配置项
|
||||||
|
`cmd` :
|
||||||
|
- `install` :安装
|
||||||
|
- `remove` :卸载
|
||||||
|
`t` :Tag标签
|
||||||
|
- `all` :全部服务
|
||||||
|
- `server` :Prometheus Server 相关服务,含:Prometheus Server、Grafana、Alertmanager、Prometheus Alert、Prometheus Webhook Dingtalk、Loki
|
||||||
|
- `exporter` :Prometheus Exporter 相关服务,含:Node Exporter、CAdvisor、Mysqld Exporter、Mongodb Exporter、Redis Exporter、Rabbitmq Exporter、Rocketmq Exporter、Elasticsearch Exporter、Zookeeper Exporter、JMX Exporter、Nginx Prometheus Exporter、Blackbox Exporter、Grafana Promtail
|
||||||
|
- `dockerce` :Docker 服务
|
||||||
|
- `node` :Prometheus Node Exporter
|
||||||
|
- `docker` :Prometheus CAdvisor
|
||||||
|
- `mysql` :Prometheus Mysqld Exporter
|
||||||
|
- `mongodb` :Prometheus Mongodb Exporter
|
||||||
|
- `redis` :Prometheus Redis Exporter
|
||||||
|
- `rabbitmq` :Prometheus Rabbitmq Exporter
|
||||||
|
- `rocketmq` :Prometheus Rocketmq Exporter
|
||||||
|
- `elasticsearch` :Prometheus Elasticsearch Exporter
|
||||||
|
- `zookeeper` :Prometheus Zookeeper Exporter
|
||||||
|
- `jmx` :Prometheus JMX Exporter
|
||||||
|
- `nginx` :Nginx Prometheus Exporter
|
||||||
|
- `blackbox` :Prometheus Blackbox Exporter
|
||||||
|
- `promtail` :Grafana Promtail
|
||||||
|
|
||||||
|
<br/>
|
||||||
|
|
||||||
|
**安装:**
|
||||||
|
**安装全部组件:**
|
||||||
|
```shell
|
||||||
|
ansible-playbook /etc/ansible/roles/role.yml -e @/etc/ansible/roles/conf/extend.yml -e cmd=install -t all
|
||||||
|
```
|
||||||
|
**仅安装 server 相关组件:**
|
||||||
|
```shell
|
||||||
|
ansible-playbook /etc/ansible/roles/role.yml -e @/etc/ansible/roles/conf/extend.yml -e cmd=install -t server
|
||||||
|
```
|
||||||
|
**仅安装 exporter 相关组件:**
|
||||||
|
```shell
|
||||||
|
ansible-playbook /etc/ansible/roles/role.yml -e @/etc/ansible/roles/conf/extend.yml -e cmd=install -t exporter
|
||||||
|
```
|
||||||
|
**安装自定义组件:**
|
||||||
|
```shell
|
||||||
|
ansible-playbook /etc/ansible/roles/role.yml -e @/etc/ansible/roles/conf/extend.yml -e cmd=install -t 组件名称(名单见上方说明)
|
||||||
|
```
|
||||||
|
示例:安装 server 和 node exporter、cadvisor、blackbox exporter、promtail
|
||||||
|
```shell
|
||||||
|
ansible-playbook /etc/ansible/roles/role.yml -e @/etc/ansible/roles/conf/extend.yml -e cmd=install -t server,node,docker,blackbox,promtail
|
||||||
|
```
|
||||||
|
**仅安装 Docker 服务:**
|
||||||
|
```shell
|
||||||
|
ansible-playbook /etc/ansible/roles/role.yml -e @/etc/ansible/roles/conf/extend.yml -e cmd=install -t dockerce
|
||||||
|
```
|
||||||
|
**卸载:**
|
||||||
|
**卸载全部组件:**
|
||||||
|
```shell
|
||||||
|
ansible-playbook /etc/ansible/roles/role.yml -e @/etc/ansible/roles/conf/extend.yml -e cmd=remove -t all
|
||||||
|
```
|
||||||
|
**仅卸载 server 相关组件:**
|
||||||
|
```shell
|
||||||
|
ansible-playbook /etc/ansible/roles/role.yml -e @/etc/ansible/roles/conf/extend.yml -e cmd=remove -t server
|
||||||
|
```
|
||||||
|
**仅卸载 exporter 相关组件:**
|
||||||
|
```shell
|
||||||
|
ansible-playbook /etc/ansible/roles/role.yml -e @/etc/ansible/roles/conf/extend.yml -e cmd=remove -t exporter
|
||||||
|
```
|
||||||
|
**卸载自定义组件:**
|
||||||
|
```shell
|
||||||
|
ansible-playbook /etc/ansible/roles/role.yml -e @/etc/ansible/roles/conf/extend.yml -e cmd=remove -t 组件名称(名单见上方说明)
|
||||||
|
```
|
||||||
|
示例:卸载 server 和 node exporter、cadvisor、blackbox exporter、promtail
|
||||||
|
```shell
|
||||||
|
ansible-playbook /etc/ansible/roles/role.yml -e @/etc/ansible/roles/conf/extend.yml -e cmd=remove -t server,node,docker,blackbox,promtail
|
||||||
|
```
|
||||||
|
**卸载 Docker 服务:**
|
||||||
|
```shell
|
||||||
|
ansible-playbook /etc/ansible/roles/role.yml -e @/etc/ansible/roles/conf/extend.yml -e cmd=remove -t dockerce
|
||||||
|
```
|
||||||
|
**注意:**
|
||||||
|
1. 当前仅测试部署 Server 相关、Node Exporter、cAdvisor
|
||||||
|
2. Prometheus Alert、Prometheus Mongodb Exporter、Prometheus Rocketmq Exporter、Prometheus JMX Exporter、Prometheus Zookeeper Exporter 仅支持 x86_64 架构处理器,故当服务器 CPU 架构不为 x86_64 时,对应的服务不会安装,tag 也无效。
|
||||||
|
3. 当主机已经安装 Docker 服务时,需要先创建对应的 Docker 网络,然后再执行脚本
|
||||||
|
```bash
|
||||||
|
docker network create Docker网络名称 --subnet Docker网络网段
|
||||||
|
```
|
||||||
|
示例如下:
|
||||||
|
```bash
|
||||||
|
docker network create --driver bridge --opt encrypted:'true' --subnet 10.21.22.0/24 prometheus
|
||||||
|
```
|
||||||
|
87
prometheus/hosts
Normal file
87
prometheus/hosts
Normal file
@ -0,0 +1,87 @@
|
|||||||
|
# This is the default ansible 'hosts' file.
|
||||||
|
#
|
||||||
|
# It should live in /etc/ansible/hosts
|
||||||
|
#
|
||||||
|
# - Comments begin with the '#' character
|
||||||
|
# - Blank lines are ignored
|
||||||
|
# - Groups of hosts are delimited by [header] elements
|
||||||
|
# - You can enter hostnames or ip addresses
|
||||||
|
# - A hostname/ip can be a member of multiple groups
|
||||||
|
|
||||||
|
# Ex 1: Ungrouped hosts, specify before any group headers.
|
||||||
|
|
||||||
|
## green.example.com
|
||||||
|
## blue.example.com
|
||||||
|
## 192.168.100.1
|
||||||
|
## 192.168.100.10
|
||||||
|
|
||||||
|
# Ex 2: A collection of hosts belonging to the 'webservers' group
|
||||||
|
|
||||||
|
## [webservers]
|
||||||
|
## alpha.example.org
|
||||||
|
## beta.example.org
|
||||||
|
## 192.168.1.100
|
||||||
|
## 192.168.1.110
|
||||||
|
|
||||||
|
# If you have multiple hosts following a pattern you can specify
|
||||||
|
# them like this:
|
||||||
|
|
||||||
|
## www[001:006].example.com
|
||||||
|
|
||||||
|
# Ex 3: A collection of database servers in the 'dbservers' group
|
||||||
|
|
||||||
|
## [dbservers]
|
||||||
|
##
|
||||||
|
## db01.intranet.mydomain.net
|
||||||
|
## db02.intranet.mydomain.net
|
||||||
|
## 10.25.1.56
|
||||||
|
## 10.25.1.57
|
||||||
|
|
||||||
|
# Here's another example of host ranges, this time there are no
|
||||||
|
# leading 0s:
|
||||||
|
|
||||||
|
## db-[99:101]-node.example.com
|
||||||
|
[dockerce]
|
||||||
|
127.0.0.1
|
||||||
|
|
||||||
|
[server]
|
||||||
|
127.0.0.1
|
||||||
|
|
||||||
|
[node]
|
||||||
|
127.0.0.1
|
||||||
|
|
||||||
|
[docker]
|
||||||
|
127.0.0.1
|
||||||
|
|
||||||
|
[blackbox]
|
||||||
|
127.0.0.1
|
||||||
|
|
||||||
|
[mysql]
|
||||||
|
127.0.0.1
|
||||||
|
|
||||||
|
[mongodb]
|
||||||
|
127.0.0.1
|
||||||
|
|
||||||
|
[redis]
|
||||||
|
127.0.0.1
|
||||||
|
|
||||||
|
[rabbitmq]
|
||||||
|
127.0.0.1
|
||||||
|
|
||||||
|
[rocketmq]
|
||||||
|
127.0.0.1
|
||||||
|
|
||||||
|
[elasticsearch]
|
||||||
|
127.0.0.1
|
||||||
|
|
||||||
|
[zookeeper]
|
||||||
|
127.0.0.1
|
||||||
|
|
||||||
|
[jmx]
|
||||||
|
127.0.0.1
|
||||||
|
|
||||||
|
[nginx]
|
||||||
|
127.0.0.1
|
||||||
|
|
||||||
|
[promtail]
|
||||||
|
127.0.0.1
|
2
prometheus/roles/alertmanager/defaults/main.yml
Normal file
2
prometheus/roles/alertmanager/defaults/main.yml
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
---
|
||||||
|
flag: ~/.flag/{{ role_name }}
|
71
prometheus/roles/alertmanager/tasks/main.yml
Normal file
71
prometheus/roles/alertmanager/tasks/main.yml
Normal file
@ -0,0 +1,71 @@
|
|||||||
|
---
|
||||||
|
# 校验 Alertmanager 是否安装
|
||||||
|
- name: '<{{ cmd | upper }}> | 校验 Alertmanager 是否安装'
|
||||||
|
stat:
|
||||||
|
path: '{{ flag }}'
|
||||||
|
register: ret
|
||||||
|
|
||||||
|
# 安装 Alertmanager
|
||||||
|
- block:
|
||||||
|
- name: '<{{ cmd | upper }}> | 创建 Alertmanager 相关目录'
|
||||||
|
file:
|
||||||
|
path: '{{ item.value }}'
|
||||||
|
state: directory
|
||||||
|
loop: '{{ alertmanager.dir | dict2items }}'
|
||||||
|
|
||||||
|
- name: '<{{ cmd | upper }}> | 安装 Alertmanager'
|
||||||
|
template:
|
||||||
|
src: '{{ item.src }}'
|
||||||
|
dest: '{{ item.dest }}'
|
||||||
|
loop:
|
||||||
|
- src: docker-compose.yml.j2
|
||||||
|
dest: '{{ alertmanager.dir.main }}/docker-compose.yml'
|
||||||
|
- src: conf/alertmanager.yml.j2
|
||||||
|
dest: '{{ alertmanager.dir.conf }}/alertmanager.yml'
|
||||||
|
|
||||||
|
- name: '<{{ cmd | upper }}> | 初始化 Alertmanager 模板文件'
|
||||||
|
copy:
|
||||||
|
src: '{{ item }}'
|
||||||
|
dest: '{{ alertmanager.dir.template }}'
|
||||||
|
with_fileglob: 'files/template/*'
|
||||||
|
|
||||||
|
- name: '<{{ cmd | upper }}> | 启动 Alertmanager 容器'
|
||||||
|
shell: |
|
||||||
|
. /etc/profile
|
||||||
|
chown -R 65534.65534 {{ alertmanager.dir.conf }} {{ alertmanager.dir.template }}
|
||||||
|
cd {{ alertmanager.dir.main }}
|
||||||
|
docker-compose down
|
||||||
|
docker-compose up -d
|
||||||
|
|
||||||
|
- name: '<{{ cmd | upper }}> | 等待 Alertmanager 服务启动'
|
||||||
|
wait_for:
|
||||||
|
port: '{{ alertmanager.port }}'
|
||||||
|
|
||||||
|
- name: '<{{ cmd | upper }}> | 创建 Alertmanager 安装标记'
|
||||||
|
shell: |
|
||||||
|
set -ex
|
||||||
|
mkdir -p ~/.flag
|
||||||
|
touch {{ flag }}
|
||||||
|
|
||||||
|
when:
|
||||||
|
- cmd == "install"
|
||||||
|
- not ret.stat.exists
|
||||||
|
- alertmanager.enable
|
||||||
|
|
||||||
|
# 卸载 Alertmanager
|
||||||
|
- block:
|
||||||
|
- name: '<{{ cmd | upper }}> | 卸载 Alertmanager'
|
||||||
|
shell: |
|
||||||
|
. /etc/profile
|
||||||
|
cd {{ alertmanager.dir.main }}
|
||||||
|
docker-compose down
|
||||||
|
|
||||||
|
- name: '<{{ cmd | upper }}> | 清除 Alertmanager 相关文件'
|
||||||
|
shell: |
|
||||||
|
rm -rf {{ alertmanager.dir.main }}
|
||||||
|
rm -rf {{ flag }}
|
||||||
|
|
||||||
|
when:
|
||||||
|
- cmd == "remove"
|
||||||
|
- ret.stat.exists
|
||||||
|
- alertmanager.enable
|
@ -0,0 +1,42 @@
|
|||||||
|
global:
|
||||||
|
resolve_timeout: 5m
|
||||||
|
|
||||||
|
route:
|
||||||
|
group_by: ['env','app','type','name']
|
||||||
|
group_wait: 30s
|
||||||
|
group_interval: 30s
|
||||||
|
repeat_interval: 1h
|
||||||
|
receiver: 'dingtalk'
|
||||||
|
{% if prometheus_alert.enable %}
|
||||||
|
routes:
|
||||||
|
- receiver: 'message'
|
||||||
|
continue: true
|
||||||
|
match:
|
||||||
|
severity: emergency
|
||||||
|
- receiver: 'dingtalk'
|
||||||
|
continue: true
|
||||||
|
match_re:
|
||||||
|
severity: critical|warning
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
receivers:
|
||||||
|
{% if prometheus_alert.enable %}
|
||||||
|
- name: 'dingtalk'
|
||||||
|
webhook_configs:
|
||||||
|
- url: 'http://{{ groups.server.0 }}:{{ prometheus_alert.port }}/prometheusalert?type=dd&tpl=prometheus-dd&ddurl=https://oapi.dingtalk.com/robot/send?access_token={{ alert.dingtalk.access_token }}'
|
||||||
|
- name: 'message'
|
||||||
|
webhook_configs:
|
||||||
|
- url: 'http://{{ groups.server.0 }}:{{ prometheus_alert.port }}/prometheusalert?type={{ alert.message.type }}dx&tpl=prometheus-dx&phone={{ alert.message.phone }}'
|
||||||
|
{% elif prometheus_webhook_dingtalk.enable -%}
|
||||||
|
- name: 'dingtalk'
|
||||||
|
webhook_configs:
|
||||||
|
- url: 'http://{{ groups.server.0 }}:{{ prometheus_webhook_dingtalk.port }}/dingtalk/webhook_legacy/send'
|
||||||
|
send_resolved: true
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
inhibit_rules:
|
||||||
|
- source_match:
|
||||||
|
severity: 'critical'
|
||||||
|
target_match:
|
||||||
|
severity: 'warning'
|
||||||
|
equal: ['env','app','type','name']
|
@ -0,0 +1,21 @@
|
|||||||
|
version: "3.9"
|
||||||
|
|
||||||
|
services:
|
||||||
|
alertmanager:
|
||||||
|
image: {{ alertmanager.image }}
|
||||||
|
container_name: {{ docker.network.name }}-alertmanager
|
||||||
|
hostname: alertmanager
|
||||||
|
restart: always
|
||||||
|
volumes:
|
||||||
|
- /etc/localtime:/etc/localtime:ro
|
||||||
|
- {{ alertmanager.dir.conf }}/alertmanager.yml:/etc/alertmanager/alertmanager.yml
|
||||||
|
- {{ alertmanager.dir.template }}:/etc/alertmanager/template
|
||||||
|
networks:
|
||||||
|
- {{ docker.network.name }}
|
||||||
|
ports:
|
||||||
|
- {{ alertmanager.port }}:9093
|
||||||
|
|
||||||
|
networks:
|
||||||
|
{{ docker.network.name }}:
|
||||||
|
external: true
|
||||||
|
name: {{ docker.network.name }}
|
2
prometheus/roles/blackbox_exporter/defaults/main.yml
Normal file
2
prometheus/roles/blackbox_exporter/defaults/main.yml
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
---
|
||||||
|
flag: ~/.flag/{{ role_name }}
|
63
prometheus/roles/blackbox_exporter/tasks/main.yml
Normal file
63
prometheus/roles/blackbox_exporter/tasks/main.yml
Normal file
@ -0,0 +1,63 @@
|
|||||||
|
---
|
||||||
|
# 校验 Blackbox Exporter 是否安装
|
||||||
|
- name: '<{{ cmd | upper }}> | 校验 Blackbox Exporter 是否安装'
|
||||||
|
stat:
|
||||||
|
path: '{{ flag }}'
|
||||||
|
register: ret
|
||||||
|
|
||||||
|
# 安装 Blackbox Exporter
|
||||||
|
- block:
|
||||||
|
- name: '<{{ cmd | upper }}> | 创建 Blackbox Exporter 相关目录'
|
||||||
|
file:
|
||||||
|
path: '{{ item.value }}'
|
||||||
|
state: directory
|
||||||
|
loop: '{{ blackbox_exporter.dir | dict2items }}'
|
||||||
|
|
||||||
|
- name: '<{{ cmd | upper }}> | 安装 Blackbox Exporter'
|
||||||
|
template:
|
||||||
|
src: '{{ item.src }}'
|
||||||
|
dest: '{{ item.dest }}'
|
||||||
|
loop:
|
||||||
|
- src: docker-compose.yml.j2
|
||||||
|
dest: '{{ blackbox_exporter.dir.main }}/docker-compose.yml'
|
||||||
|
- src: conf/blackbox.yml.j2
|
||||||
|
dest: '{{ blackbox_exporter.dir.conf }}/blackbox.yml'
|
||||||
|
|
||||||
|
- name: '<{{ cmd | upper }}> | 启动 Blackbox Exporter 容器'
|
||||||
|
shell: |
|
||||||
|
. /etc/profile
|
||||||
|
chown -R 65534.65534 {{ blackbox_exporter.dir.conf }}
|
||||||
|
cd {{ blackbox_exporter.dir.main }}
|
||||||
|
docker-compose down
|
||||||
|
docker-compose up -d
|
||||||
|
|
||||||
|
- name: '<{{ cmd | upper }}> | 等待 Blackbox Exporter 服务启动'
|
||||||
|
wait_for:
|
||||||
|
port: '{{ blackbox_exporter.port }}'
|
||||||
|
|
||||||
|
- name: '<{{ cmd | upper }}> | 创建 Blackbox Exporter 安装标记'
|
||||||
|
shell: |
|
||||||
|
set -ex
|
||||||
|
mkdir -p ~/.flag
|
||||||
|
touch {{ flag }}
|
||||||
|
|
||||||
|
when:
|
||||||
|
- cmd == "install"
|
||||||
|
- not ret.stat.exists
|
||||||
|
|
||||||
|
# 卸载 Blackbox Exporter
|
||||||
|
- block:
|
||||||
|
- name: '<{{ cmd | upper }}> | 卸载 Blackbox Exporter'
|
||||||
|
shell: |
|
||||||
|
. /etc/profile
|
||||||
|
cd {{ blackbox_exporter.dir.main }}
|
||||||
|
docker-compose down
|
||||||
|
|
||||||
|
- name: '<{{ cmd | upper }}> | 清除 Blackbox Exporter 相关文件'
|
||||||
|
shell: |
|
||||||
|
rm -rf {{ blackbox_exporter.dir.main }}
|
||||||
|
rm -rf {{ flag }}
|
||||||
|
|
||||||
|
when:
|
||||||
|
- cmd == "remove"
|
||||||
|
- ret.stat.exists
|
@ -0,0 +1,50 @@
|
|||||||
|
modules:
|
||||||
|
http_2xx:
|
||||||
|
prober: http
|
||||||
|
timeout: 10s
|
||||||
|
http_post_2xx:
|
||||||
|
prober: http
|
||||||
|
http:
|
||||||
|
method: POST
|
||||||
|
tcp_connect:
|
||||||
|
prober: tcp
|
||||||
|
pop3s_banner:
|
||||||
|
prober: tcp
|
||||||
|
tcp:
|
||||||
|
query_response:
|
||||||
|
- expect: "^+OK"
|
||||||
|
tls: true
|
||||||
|
tls_config:
|
||||||
|
insecure_skip_verify: false
|
||||||
|
grpc:
|
||||||
|
prober: grpc
|
||||||
|
grpc:
|
||||||
|
tls: true
|
||||||
|
preferred_ip_protocol: "ip4"
|
||||||
|
grpc_plain:
|
||||||
|
prober: grpc
|
||||||
|
grpc:
|
||||||
|
tls: false
|
||||||
|
service: "service1"
|
||||||
|
ssh_banner:
|
||||||
|
prober: tcp
|
||||||
|
tcp:
|
||||||
|
query_response:
|
||||||
|
- expect: "^SSH-2.0-"
|
||||||
|
- send: "SSH-2.0-blackbox-ssh-check"
|
||||||
|
irc_banner:
|
||||||
|
prober: tcp
|
||||||
|
tcp:
|
||||||
|
query_response:
|
||||||
|
- send: "NICK prober"
|
||||||
|
- send: "USER prober prober prober :prober"
|
||||||
|
- expect: "PING :([^ ]+)"
|
||||||
|
send: "PONG ${1}"
|
||||||
|
- expect: "^:[^ ]+ 001"
|
||||||
|
icmp:
|
||||||
|
prober: icmp
|
||||||
|
icmp_ttl5:
|
||||||
|
prober: icmp
|
||||||
|
timeout: 5s
|
||||||
|
icmp:
|
||||||
|
ttl: 5
|
@ -0,0 +1,22 @@
|
|||||||
|
version: "3.9"
|
||||||
|
|
||||||
|
services:
|
||||||
|
blackbox-exporter:
|
||||||
|
image: {{ blackbox_exporter.image }}
|
||||||
|
container_name: {{ docker.network.name }}-blackbox-exporter
|
||||||
|
hostname: blackbox-exporter
|
||||||
|
restart: always
|
||||||
|
volumes:
|
||||||
|
- /etc/localtime:/etc/localtime:ro
|
||||||
|
- {{ blackbox_exporter.dir.conf }}/blackbox.yml:/etc/blackbox_exporter/config/blackbox.yml:ro
|
||||||
|
networks:
|
||||||
|
- {{ docker.network.name }}
|
||||||
|
ports:
|
||||||
|
- {{ blackbox_exporter.port }}:9115
|
||||||
|
environment:
|
||||||
|
- config.file=/etc/blackbox_exporter/config/blackbox.yml
|
||||||
|
|
||||||
|
networks:
|
||||||
|
{{ docker.network.name }}:
|
||||||
|
external: true
|
||||||
|
name: {{ docker.network.name }}
|
2
prometheus/roles/cadvisor/defaults/main.yml
Normal file
2
prometheus/roles/cadvisor/defaults/main.yml
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
---
|
||||||
|
flag: ~/.flag/{{ role_name }}
|
65
prometheus/roles/cadvisor/tasks/main.yml
Normal file
65
prometheus/roles/cadvisor/tasks/main.yml
Normal file
@ -0,0 +1,65 @@
|
|||||||
|
---
|
||||||
|
# 校验 cAdvisor 是否安装
|
||||||
|
- name: '<{{ cmd | upper }}> | 校验 cAdvisor 是否安装'
|
||||||
|
stat:
|
||||||
|
path: '{{ flag }}'
|
||||||
|
register: ret
|
||||||
|
|
||||||
|
# 安装 cAdvisor
|
||||||
|
- block:
|
||||||
|
- name: '<{{ cmd | upper }}> | 创建 cAdvisor 相关目录'
|
||||||
|
file:
|
||||||
|
path: '{{ cadvisor.dir }}'
|
||||||
|
state: directory
|
||||||
|
|
||||||
|
- name: '<{{ cmd | upper }}> | 安装 cAdvisor'
|
||||||
|
template:
|
||||||
|
src: '{{ item.src }}'
|
||||||
|
dest: '{{ item.dest }}'
|
||||||
|
loop:
|
||||||
|
- src: docker-compose.yml.j2
|
||||||
|
dest: '{{ cadvisor.dir }}/docker-compose.yml'
|
||||||
|
|
||||||
|
- name: '<{{ cmd | upper }}> | 配置部署主机'
|
||||||
|
shell: |
|
||||||
|
mount -o remount,rw '/sys/fs/cgroup'
|
||||||
|
sudo ln -s /sys/fs/cgroup/cpu,cpuacct /sys/fs/cgroup/cpuacct,cpu
|
||||||
|
ignore_errors: true
|
||||||
|
|
||||||
|
- name: '<{{ cmd | upper }}> | 启动 cAdvisor 容器'
|
||||||
|
shell: |
|
||||||
|
. /etc/profile
|
||||||
|
cd {{ cadvisor.dir }}
|
||||||
|
docker-compose down
|
||||||
|
docker-compose up -d
|
||||||
|
|
||||||
|
- name: '<{{ cmd | upper }}> | 等待 cAdvisor 服务启动'
|
||||||
|
wait_for:
|
||||||
|
port: '{{ cadvisor.port }}'
|
||||||
|
|
||||||
|
- name: '<{{ cmd | upper }}> | 创建 cAdvisor 安装标记'
|
||||||
|
shell: |
|
||||||
|
set -ex
|
||||||
|
mkdir -p ~/.flag
|
||||||
|
touch {{ flag }}
|
||||||
|
|
||||||
|
when:
|
||||||
|
- cmd == "install"
|
||||||
|
- not ret.stat.exists
|
||||||
|
|
||||||
|
# 卸载 cAdvisor
|
||||||
|
- block:
|
||||||
|
- name: '<{{ cmd | upper }}> | 卸载 cAdvisor'
|
||||||
|
shell: |
|
||||||
|
. /etc/profile
|
||||||
|
cd {{ cadvisor.dir }}
|
||||||
|
docker-compose down
|
||||||
|
|
||||||
|
- name: '<{{ cmd | upper }}> | 清除 cAdvisor 相关文件'
|
||||||
|
shell: |
|
||||||
|
rm -rf {{ cadvisor.dir }}
|
||||||
|
rm -rf {{ flag }}
|
||||||
|
|
||||||
|
when:
|
||||||
|
- cmd == "remove"
|
||||||
|
- ret.stat.exists
|
24
prometheus/roles/cadvisor/templates/docker-compose.yml.j2
Normal file
24
prometheus/roles/cadvisor/templates/docker-compose.yml.j2
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
version: "3.9"
|
||||||
|
|
||||||
|
services:
|
||||||
|
cadvisor:
|
||||||
|
image: {{ cadvisor.image }}
|
||||||
|
container_name: {{ docker.network.name }}-cadvisor
|
||||||
|
hostname: cadvisor
|
||||||
|
restart: always
|
||||||
|
privileged: true
|
||||||
|
volumes:
|
||||||
|
- /etc/localtime:/etc/localtime:ro
|
||||||
|
- /:/rootfs:ro
|
||||||
|
- /var/run:/var/run:rw
|
||||||
|
- /sys:/sys:ro
|
||||||
|
- /var/lib/docker/:/var/lib/docker:ro
|
||||||
|
networks:
|
||||||
|
- {{ docker.network.name }}
|
||||||
|
ports:
|
||||||
|
- {{ cadvisor.port }}:8080
|
||||||
|
|
||||||
|
networks:
|
||||||
|
{{ docker.network.name }}:
|
||||||
|
external: true
|
||||||
|
name: {{ docker.network.name }}
|
BIN
prometheus/roles/conf/.extend.yml.swp
Normal file
BIN
prometheus/roles/conf/.extend.yml.swp
Normal file
Binary file not shown.
408
prometheus/roles/conf/extend.yml
Normal file
408
prometheus/roles/conf/extend.yml
Normal file
@ -0,0 +1,408 @@
|
|||||||
|
---
|
||||||
|
# 部署目录(部署时会在此目录下生成各服务的子目录)
|
||||||
|
base_dir: /opt
|
||||||
|
|
||||||
|
# Docker 配置
|
||||||
|
docker:
|
||||||
|
## Docker Engine 安装包名称
|
||||||
|
package: docker-24.0.7.tgz
|
||||||
|
## Docker 部署目录
|
||||||
|
dir:
|
||||||
|
### 主目录
|
||||||
|
main: '{{ base_dir }}/docker'
|
||||||
|
### 可执行文件目录
|
||||||
|
bin: '{{ base_dir }}/docker/bin'
|
||||||
|
### 数据目录
|
||||||
|
data: '{{ base_dir }}/docker/data'
|
||||||
|
## 部署 Prometheus 相关组件时使用的网络
|
||||||
|
network:
|
||||||
|
name: prometheus
|
||||||
|
subnet: 10.21.22.0/24
|
||||||
|
|
||||||
|
# Prometheus Server 配置
|
||||||
|
prometheus:
|
||||||
|
## 镜像
|
||||||
|
image: prom/prometheus:v2.48.0
|
||||||
|
## 部署目录
|
||||||
|
dir:
|
||||||
|
### 主目录
|
||||||
|
main: '{{ base_dir }}/prometheus'
|
||||||
|
### 配置文件目录
|
||||||
|
conf: '{{ base_dir }}/prometheus/conf'
|
||||||
|
### 告警规则文件目录
|
||||||
|
rules: '{{ base_dir }}/prometheus/rules'
|
||||||
|
### 数据目录
|
||||||
|
data: '{{ base_dir }}/prometheus/data'
|
||||||
|
## 端口号
|
||||||
|
port: 9090
|
||||||
|
|
||||||
|
# Grafana 配置
|
||||||
|
grafana:
|
||||||
|
## 是否部署 Grafana
|
||||||
|
enable: true
|
||||||
|
## 镜像
|
||||||
|
image: grafana/grafana:10.2.2
|
||||||
|
## 部署目录
|
||||||
|
dir:
|
||||||
|
### 主目录
|
||||||
|
main: '{{ base_dir }}/grafana'
|
||||||
|
### 配置文件目录
|
||||||
|
conf: '{{ base_dir }}/grafana/conf'
|
||||||
|
### 数据目录
|
||||||
|
data: '{{ base_dir }}/grafana/data'
|
||||||
|
## 端口号
|
||||||
|
port: 3000
|
||||||
|
|
||||||
|
# Alertmanager 配置
|
||||||
|
alertmanager:
|
||||||
|
## 是否部署 Alertmanager
|
||||||
|
enable: true
|
||||||
|
## 镜像
|
||||||
|
image: prom/alertmanager:v0.26.0
|
||||||
|
## 部署目录
|
||||||
|
dir:
|
||||||
|
### 主目录
|
||||||
|
main: '{{ base_dir }}/alertmanager'
|
||||||
|
### 配置文件目录
|
||||||
|
conf: '{{ base_dir }}/alertmanager/conf'
|
||||||
|
### 模板目录
|
||||||
|
template: '{{ base_dir }}/alertmanager/template'
|
||||||
|
## 端口号
|
||||||
|
port: 9093
|
||||||
|
|
||||||
|
# Prometheus Alert 配置 ( Prometheus Alert 和 Prometheus Webhook Dingtalk 只能开启其中一个,不能同时开启)
|
||||||
|
prometheus_alert:
|
||||||
|
## 是否启用 Prometheus Alert
|
||||||
|
enable: true
|
||||||
|
## 镜像
|
||||||
|
image: feiyu563/prometheus-alert:v4.9
|
||||||
|
## 部署目录
|
||||||
|
dir:
|
||||||
|
### 主目录
|
||||||
|
main: '{{ base_dir }}/prometheus-alert'
|
||||||
|
### 配置文件目录
|
||||||
|
conf: '{{ base_dir }}/prometheus-alert/conf'
|
||||||
|
### 数据库目录
|
||||||
|
db: '{{ base_dir }}/prometheus-alert/db'
|
||||||
|
### 数据文件目录
|
||||||
|
logs: '{{ base_dir }}/prometheus-alert/logs'
|
||||||
|
## 端口号
|
||||||
|
port: 9080 #8080
|
||||||
|
## 用户名
|
||||||
|
user: 'admin'
|
||||||
|
## 密码
|
||||||
|
password: '123456'
|
||||||
|
## 标题
|
||||||
|
title: 'PrometheusAlert'
|
||||||
|
## 访问 URL
|
||||||
|
url: 'https://alert.hty1024.com'
|
||||||
|
|
||||||
|
# Prometheus Webhook Dingtalk 配置 ( Prometheus Alert 和 Prometheus Webhook Dingtalk 只能开启其中一个,不能同时开启)
|
||||||
|
prometheus_webhook_dingtalk:
|
||||||
|
## 是否启用 Prometheus Webhook Dingtalk
|
||||||
|
enable: false
|
||||||
|
## 镜像
|
||||||
|
image: timonwong/prometheus-webhook-dingtalk:v2.1.0
|
||||||
|
## 部署目录
|
||||||
|
dir:
|
||||||
|
### 主目录
|
||||||
|
main: '{{ base_dir }}/prometheus-webhook-dingtalk'
|
||||||
|
### 配置文件目录
|
||||||
|
conf: '{{ base_dir }}/prometheus-webhook-dingtalk/conf'
|
||||||
|
### 模板文件目录
|
||||||
|
template: '{{ base_dir }}/prometheus-webhook-dingtalk/template'
|
||||||
|
## 端口号
|
||||||
|
port: 9060 #8060
|
||||||
|
|
||||||
|
# 告警配置
|
||||||
|
alert:
|
||||||
|
## 钉钉机器人
|
||||||
|
dingtalk:
|
||||||
|
access_token: '123456789'
|
||||||
|
## 短信
|
||||||
|
message:
|
||||||
|
type: 'tx'
|
||||||
|
phone: '12300001111'
|
||||||
|
### 注意:部署完成之后,需要手动将 prometheus-webhook-dingtalk/conf/config.yml 文件的 “【【” 替换为 “{{”,将 “】】” 替换为 “}}”
|
||||||
|
title: '【【 template "legacy.title" . 】】'
|
||||||
|
text: '【【 template "email.to.message" . 】】'
|
||||||
|
|
||||||
|
# Loki 配置
|
||||||
|
loki:
|
||||||
|
## 是否启用 Loki
|
||||||
|
enable: true
|
||||||
|
## 镜像
|
||||||
|
image: grafana/loki:2.9.2
|
||||||
|
## 部署目录
|
||||||
|
dir:
|
||||||
|
### 主目录
|
||||||
|
main: '{{ base_dir }}/loki'
|
||||||
|
### 配置文件目录
|
||||||
|
conf: '{{ base_dir }}/loki/conf'
|
||||||
|
## 端口号
|
||||||
|
port: 3100
|
||||||
|
|
||||||
|
# Node Exporter 配置
|
||||||
|
node_exporter:
|
||||||
|
## 是否启用 Node Exporter
|
||||||
|
enable: true
|
||||||
|
## 镜像
|
||||||
|
image: prom/node-exporter:v1.7.0
|
||||||
|
## 部署目录
|
||||||
|
dir: '{{ base_dir }}/exporter/node-exporter'
|
||||||
|
## 端口号
|
||||||
|
port: 9100
|
||||||
|
|
||||||
|
# CAdvisor 配置
|
||||||
|
cadvisor:
|
||||||
|
## 是否启用 CAdvisor
|
||||||
|
enable: true
|
||||||
|
## 镜像
|
||||||
|
image: zcube/cadvisor:v0.45.0
|
||||||
|
## 部署目录
|
||||||
|
dir: '{{ base_dir }}/exporter/cadvisor'
|
||||||
|
## 端口号
|
||||||
|
port: 9180 #8088
|
||||||
|
|
||||||
|
# Blackbox Exporter 配置
|
||||||
|
blackbox_exporter:
|
||||||
|
## 是否启用 Blackbox Exporter
|
||||||
|
enable: true
|
||||||
|
## 镜像
|
||||||
|
image: prom/blackbox-exporter:v0.24.0
|
||||||
|
## 部署目录
|
||||||
|
dir:
|
||||||
|
### 主目录
|
||||||
|
main: '{{ base_dir }}/exporter/blackbox'
|
||||||
|
### 配置文件目录
|
||||||
|
conf: '{{ base_dir }}/exporter/blackbox/conf'
|
||||||
|
## 端口号
|
||||||
|
port: 9115
|
||||||
|
## 探测 URL
|
||||||
|
targets:
|
||||||
|
- https://hty1024.com
|
||||||
|
- https://www.hty1024.com
|
||||||
|
- https://wiki.hty1024.com
|
||||||
|
- https://git.hty1024.com
|
||||||
|
|
||||||
|
# Mysqld Exporter 配置
|
||||||
|
mysqld_exporter:
|
||||||
|
## 镜像
|
||||||
|
image: prom/mysqld-exporter:v0.15.0
|
||||||
|
## 部署目录
|
||||||
|
dir: '{{ base_dir }}/exporter/mysqld-exporter'
|
||||||
|
## 采集节点
|
||||||
|
nodes:
|
||||||
|
### 主机
|
||||||
|
- host: 127.0.0.1
|
||||||
|
### Mysqld Exporter 端口号
|
||||||
|
port: 9104
|
||||||
|
### MySQL URL
|
||||||
|
url: 127.0.0.1:3306
|
||||||
|
### MySQL 用户名
|
||||||
|
user: exporter
|
||||||
|
### MySQL 密码
|
||||||
|
password: 123456
|
||||||
|
### MySQL 数据库
|
||||||
|
database:
|
||||||
|
- host: 192.168.1.1
|
||||||
|
port: 9104
|
||||||
|
url: 192.168.1.1
|
||||||
|
user: exporter
|
||||||
|
password: 123456
|
||||||
|
database:
|
||||||
|
|
||||||
|
# MongoDB Exporter 配置
|
||||||
|
mongodb_exporter:
|
||||||
|
## 镜像
|
||||||
|
image: bitnami/mongodb-exporter:0.40.0
|
||||||
|
## 部署目录
|
||||||
|
dir: '{{ base_dir }}/exporter/mongodb-exporter'
|
||||||
|
## 采集节点
|
||||||
|
nodes:
|
||||||
|
### 主机
|
||||||
|
- host: 127.0.0.1
|
||||||
|
### MongoDB Exporter 端口号
|
||||||
|
port: 9126
|
||||||
|
### MongoDB URL
|
||||||
|
url: 127.0.0.1:27017
|
||||||
|
- host: 192.168.1.1
|
||||||
|
port: 9126
|
||||||
|
url: 192.168.1.1:27017
|
||||||
|
|
||||||
|
# Redis Exporter 配置
|
||||||
|
redis_exporter:
|
||||||
|
## 镜像
|
||||||
|
image: oliver006/redis_exporter:v1.55.0
|
||||||
|
## 部署目录
|
||||||
|
dir: '{{ base_dir }}/exporter/redis-exporter'
|
||||||
|
## 采集节点
|
||||||
|
nodes:
|
||||||
|
### 主机
|
||||||
|
- host: 127.0.0.1
|
||||||
|
### Redis Exporter 端口号
|
||||||
|
port: 9121
|
||||||
|
### Redis URL
|
||||||
|
url: 127.0.0.1:6379
|
||||||
|
### Redis 密码
|
||||||
|
password: 123456
|
||||||
|
- host: 192.168.1.1
|
||||||
|
port: 9121
|
||||||
|
url: 127.0.0.1:6379
|
||||||
|
password: 123456
|
||||||
|
|
||||||
|
# Rabbitmq Exporter 配置
|
||||||
|
rabbitmq_exporter:
|
||||||
|
## 镜像
|
||||||
|
image: kbudde/rabbitmq-exporter:1.0.0-RC19
|
||||||
|
## 部署目录
|
||||||
|
dir: '{{ base_dir }}/exporter/rabbitmq-exporter'
|
||||||
|
## 采集节点
|
||||||
|
nodes:
|
||||||
|
### 主机
|
||||||
|
- host: 127.0.0.1
|
||||||
|
### Rabbitmq Exporter 端口号
|
||||||
|
port: 9419
|
||||||
|
### RabbitMQ URL
|
||||||
|
url: 127.0.0.1:15672
|
||||||
|
### RabbitMQ 用户名
|
||||||
|
user: root
|
||||||
|
### RabbitMQ 密码
|
||||||
|
password: 123456
|
||||||
|
- host: 192.168.1.1
|
||||||
|
port: 9419
|
||||||
|
url: 127.0.0.1:15672
|
||||||
|
user: root
|
||||||
|
password: 123456
|
||||||
|
|
||||||
|
# Rocketmq Exporter 配置
|
||||||
|
rocketmq_exporter:
|
||||||
|
## 镜像
|
||||||
|
image: bitnami/java:1.8.392-9
|
||||||
|
## jar 包名称
|
||||||
|
jar: rocketmq-exporter-0.0.2-SNAPSHOT.jar
|
||||||
|
## 部署目录
|
||||||
|
dir: '{{ base_dir }}/exporter/rocketmq-exporter'
|
||||||
|
## 采集节点
|
||||||
|
nodes:
|
||||||
|
### 主机
|
||||||
|
- host: 127.0.0.1
|
||||||
|
### Rocketmq Exporter 端口号
|
||||||
|
port: 5557
|
||||||
|
### Rocketmq URL
|
||||||
|
url: 127.0.0.1:9876
|
||||||
|
### Rocketmq 版本号
|
||||||
|
version: V4_9_4
|
||||||
|
- host: 192.168.1.1
|
||||||
|
port: 5557
|
||||||
|
url: 127.0.0.1:9876
|
||||||
|
version: V4_9_4
|
||||||
|
|
||||||
|
# Elasticsearch Exporter 配置
|
||||||
|
elasticsearch_exporter:
|
||||||
|
## 镜像
|
||||||
|
image: prometheuscommunity/elasticsearch-exporter:v1.6.0
|
||||||
|
## 部署目录
|
||||||
|
dir: '{{ base_dir }}/exporter/elasticsearch-exporter'
|
||||||
|
## 采集节点
|
||||||
|
nodes:
|
||||||
|
### 主机
|
||||||
|
- host: 127.0.0.1
|
||||||
|
### Elasticsearch Exporter 端口号
|
||||||
|
port: 9114
|
||||||
|
### Elasticsearch URL
|
||||||
|
url: 127.0.0.1:9200
|
||||||
|
- host: 192.168.1.1
|
||||||
|
port: 9114
|
||||||
|
url: 127.0.0.1:9200
|
||||||
|
|
||||||
|
# Zookeeper Exporter 配置
|
||||||
|
zookeeper_exporter:
|
||||||
|
## 镜像
|
||||||
|
image: dabealu/zookeeper-exporter:v0.1.13
|
||||||
|
## 部署目录
|
||||||
|
dir: '{{ base_dir }}/exporter/zookeeper-exporter'
|
||||||
|
## 采集节点
|
||||||
|
nodes:
|
||||||
|
### 主机
|
||||||
|
- host: 127.0.0.1
|
||||||
|
### Zookeeper Exporter 端口号
|
||||||
|
port: 9141
|
||||||
|
### Zookeeper URL
|
||||||
|
url: 127.0.0.1:2181
|
||||||
|
- host: 192.168.1.1
|
||||||
|
port: 9141
|
||||||
|
url: 127.0.0.1:2181
|
||||||
|
|
||||||
|
# JMX Exporter 配置
|
||||||
|
jmx_exporter:
|
||||||
|
## 运行模式( javaagent:Java Agent 模式运行;httpserver:HTTP Server 模式运行)
|
||||||
|
model: httpserver
|
||||||
|
## 镜像
|
||||||
|
image: bitnami/java:1.8.392-9
|
||||||
|
## jar 包名称
|
||||||
|
jar: jmx_prometheus_httpserver-0.17.2.jar
|
||||||
|
## 部署目录
|
||||||
|
dir:
|
||||||
|
### 主目录
|
||||||
|
main: '{{ base_dir }}/exporter/jmx-exporter'
|
||||||
|
### 配置文件目录
|
||||||
|
conf: '{{ base_dir }}/exporter/jmx-exporter/conf'
|
||||||
|
## 采集节点
|
||||||
|
nodes:
|
||||||
|
### 主机
|
||||||
|
- host: 127.0.0.1
|
||||||
|
### JMX Exporter 端口号
|
||||||
|
port: 9151
|
||||||
|
### JMX Exporter URL
|
||||||
|
url: localhost:8080
|
||||||
|
- host: 192.168.1.1
|
||||||
|
port: 9151
|
||||||
|
url: localhost:8080
|
||||||
|
|
||||||
|
# Nginx Prometheus Exporter 配置
|
||||||
|
nginx_prometheus_exporter:
|
||||||
|
## 镜像
|
||||||
|
image: nginx/nginx-prometheus-exporter:0.11.0
|
||||||
|
## 部署目录
|
||||||
|
dir: '{{ base_dir }}/exporter/nginx-prometheus-exporter'
|
||||||
|
## 采集节点
|
||||||
|
nodes:
|
||||||
|
### 主机
|
||||||
|
- host: 127.0.0.1
|
||||||
|
### Nginx Prometheus Exporter 端口号
|
||||||
|
port: 9113
|
||||||
|
### Nginx URL
|
||||||
|
url: http://127.0.0.1/nginx_status
|
||||||
|
- host: 192.168.1.1
|
||||||
|
port: 9113
|
||||||
|
url: http://127.0.0.1/nginx_status
|
||||||
|
|
||||||
|
# Promtail 配置
|
||||||
|
promtail:
|
||||||
|
## 镜像
|
||||||
|
image: grafana/promtail:2.9.2
|
||||||
|
## 部署目录
|
||||||
|
dir:
|
||||||
|
### 主目录
|
||||||
|
main: '{{ base_dir }}/exporter/promtail'
|
||||||
|
### 配置文件目录
|
||||||
|
conf: '{{ base_dir }}/exporter/promtail/conf'
|
||||||
|
## 采集节点
|
||||||
|
nodes:
|
||||||
|
### 主机
|
||||||
|
- host: 127.0.0.1
|
||||||
|
### Promtail 端口号
|
||||||
|
port: 9188
|
||||||
|
### 需要收集的日志目录
|
||||||
|
targets:
|
||||||
|
#### 名称
|
||||||
|
- name: system
|
||||||
|
#### 路径
|
||||||
|
path: /var/log
|
||||||
|
- host: 192.168.1.1
|
||||||
|
port: 9188
|
||||||
|
targets:
|
||||||
|
- name: system
|
||||||
|
path: /var/log
|
||||||
|
|
2
prometheus/roles/docker/defaults/main.yml
Normal file
2
prometheus/roles/docker/defaults/main.yml
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
---
|
||||||
|
flag: ~/.flag/{{ role_name }}
|
BIN
prometheus/roles/docker/files/aarch64/docker-24.0.7.tgz
Normal file
BIN
prometheus/roles/docker/files/aarch64/docker-24.0.7.tgz
Normal file
Binary file not shown.
BIN
prometheus/roles/docker/files/aarch64/docker-compose
Executable file
BIN
prometheus/roles/docker/files/aarch64/docker-compose
Executable file
Binary file not shown.
BIN
prometheus/roles/docker/files/x86_64/docker-24.0.7.tgz
Normal file
BIN
prometheus/roles/docker/files/x86_64/docker-24.0.7.tgz
Normal file
Binary file not shown.
BIN
prometheus/roles/docker/files/x86_64/docker-compose
Executable file
BIN
prometheus/roles/docker/files/x86_64/docker-compose
Executable file
Binary file not shown.
159
prometheus/roles/docker/tasks/main.yml
Normal file
159
prometheus/roles/docker/tasks/main.yml
Normal file
@ -0,0 +1,159 @@
|
|||||||
|
---
|
||||||
|
# 校验 Docker Engine 是否安装
|
||||||
|
- name: '<{{ cmd | upper }}> | 校验 Docker Engine 是否安装'
|
||||||
|
shell: |
|
||||||
|
. /etc/profile
|
||||||
|
docker info
|
||||||
|
register: docker_ret
|
||||||
|
ignore_errors: true
|
||||||
|
|
||||||
|
# 校验 Docker Compose 是否安装
|
||||||
|
- name: '<{{ cmd | upper }}> | 校验 Docker Compose 是否安装'
|
||||||
|
shell: |
|
||||||
|
. /etc/profile
|
||||||
|
docker-compose version
|
||||||
|
register: compose_ret
|
||||||
|
ignore_errors: true
|
||||||
|
|
||||||
|
# 安装 Docker Engine
|
||||||
|
- block:
|
||||||
|
- name: '<{{ cmd | upper }}> | 编辑 ~/.bashrc 文件环境变量'
|
||||||
|
blockinfile:
|
||||||
|
path: ~/.bashrc
|
||||||
|
block: |
|
||||||
|
export DOCKER_HOME={{ docker.dir.bin }}
|
||||||
|
export PATH=$PATH:$DOCKER_HOME
|
||||||
|
marker: '#{mark} DOCKER Environment'
|
||||||
|
insertbefore: 'BOF'
|
||||||
|
|
||||||
|
- name: '<{{ cmd | upper }}> | 编辑 /etc/profile 文件环境变量'
|
||||||
|
blockinfile:
|
||||||
|
path: /etc/profile
|
||||||
|
block: |
|
||||||
|
export DOCKER_HOME={{ docker.dir.bin }}
|
||||||
|
export PATH=$PATH:$DOCKER_HOME
|
||||||
|
marker: '#{mark} DOCKER Environment'
|
||||||
|
insertafter: 'EOF'
|
||||||
|
|
||||||
|
- name: '<{{ cmd | upper }}> | 创建 Docker 用户组'
|
||||||
|
shell:
|
||||||
|
groupadd -r docker
|
||||||
|
ignore_errors: yes
|
||||||
|
|
||||||
|
- name: '<{{ cmd | upper }}> | 创建 Docker 相关目录并更新系统配置'
|
||||||
|
shell: |
|
||||||
|
source /etc/profile
|
||||||
|
mkdir -p {{ docker.dir.main }}
|
||||||
|
mkdir -p {{ docker.dir.bin }}
|
||||||
|
mkdir -p {{ docker.dir.data }}
|
||||||
|
mkdir -p /etc/docker
|
||||||
|
if [[ -e /etc/docker/daemon.json ]];then
|
||||||
|
cp /etc/docker/daemon.json /etc/docker/daemon.json.bak
|
||||||
|
fi
|
||||||
|
modprobe br_netfilter
|
||||||
|
echo 'net.bridge.bridge-nf-call-ip6tables = 1' > /etc/sysctl.d/docker.conf
|
||||||
|
echo 'net.bridge.bridge-nf-call-iptables = 1' >> /etc/sysctl.d/docker.conf
|
||||||
|
echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.d/docker.conf
|
||||||
|
sysctl --system
|
||||||
|
|
||||||
|
- name: '<{{ cmd | upper }}> | 安装 Docker Engine'
|
||||||
|
unarchive:
|
||||||
|
src: 'files/{{ ansible_architecture }}/{{ docker.package }}'
|
||||||
|
dest: '{{ docker.dir.bin }}'
|
||||||
|
mode: 0755
|
||||||
|
# extra_opts:
|
||||||
|
# - --strip-components 1
|
||||||
|
|
||||||
|
- name: '<{{ cmd | upper }}> | 删除 Docker 临时文件'
|
||||||
|
shell: |
|
||||||
|
mv {{ docker.dir.bin }}/docker {{ docker.dir.bin }}/docker-tmp
|
||||||
|
mv -f {{ docker.dir.bin }}/docker-tmp/* {{ docker.dir.bin }}
|
||||||
|
rm -rf {{ docker.dir.bin }}/docker-tmp
|
||||||
|
|
||||||
|
- name: '<{{ cmd | upper }}> | 初始化 Docker 相关配置文件'
|
||||||
|
template:
|
||||||
|
src: '{{ item.src }}'
|
||||||
|
dest: '{{ item.dest }}'
|
||||||
|
group: docker
|
||||||
|
loop:
|
||||||
|
- src: docker.service.j2
|
||||||
|
dest: /lib/systemd/system/docker.service
|
||||||
|
- src: docker.socket.j2
|
||||||
|
dest: /lib/systemd/system/docker.socket
|
||||||
|
- src: daemon.json.j2
|
||||||
|
dest: /etc/docker/daemon.json
|
||||||
|
|
||||||
|
- name: '<{{ cmd | upper }}> | 启动 Docker 服务'
|
||||||
|
systemd:
|
||||||
|
daemon_reload: yes
|
||||||
|
state: restarted
|
||||||
|
name: docker.service
|
||||||
|
enabled: yes
|
||||||
|
|
||||||
|
- name: '<{{ cmd | upper }}> | 创建 Docker 网络'
|
||||||
|
shell: |
|
||||||
|
. /etc/profile
|
||||||
|
if docker network ls | grep -q {{ docker.network.name }} ; then
|
||||||
|
docker network ls
|
||||||
|
else
|
||||||
|
docker network create {{ docker.network.name }} --subnet {{ docker.network.subnet }}
|
||||||
|
fi
|
||||||
|
|
||||||
|
- name: '<{{ cmd | upper }}> | 添加 Docker 安装标记'
|
||||||
|
shell: |
|
||||||
|
set -ex
|
||||||
|
mkdir -p ~/.flag
|
||||||
|
touch {{ flag }}
|
||||||
|
|
||||||
|
when:
|
||||||
|
- docker_ret.failed
|
||||||
|
- cmd == "install"
|
||||||
|
|
||||||
|
# 安装 Docker Compose
|
||||||
|
- block:
|
||||||
|
- name: '<{{ cmd | upper }}> | 安装 Docker Compose'
|
||||||
|
copy:
|
||||||
|
src: files/{{ ansible_architecture }}/docker-compose
|
||||||
|
dest: '{{ docker.dir.bin }}/docker-compose'
|
||||||
|
mode: 0755
|
||||||
|
|
||||||
|
when:
|
||||||
|
- compose_ret.failed
|
||||||
|
- cmd == "install"
|
||||||
|
|
||||||
|
# 卸载 Docker Compose 和 Docker Engine
|
||||||
|
- block:
|
||||||
|
- name: '<{{ cmd | upper }}> | 删除 Docker 网络'
|
||||||
|
shell: |
|
||||||
|
docker network rm {{ docker.network.name }}
|
||||||
|
|
||||||
|
- name: '<{{ cmd | upper }}> | 停止 Docker 服务'
|
||||||
|
systemd:
|
||||||
|
state: stopped
|
||||||
|
name: docker.service
|
||||||
|
enabled: no
|
||||||
|
|
||||||
|
- name: '<{{ cmd | upper }}> | 清除 Docker 环境变量'
|
||||||
|
blockinfile:
|
||||||
|
path: '{{ item }}'
|
||||||
|
marker: '#{mark} DOCKER Environment'
|
||||||
|
state: absent
|
||||||
|
backup: yes
|
||||||
|
loop:
|
||||||
|
- ~/.bashrc
|
||||||
|
- /etc/profile
|
||||||
|
|
||||||
|
- name: '<{{ cmd | upper }}> | 卸载 Docker Engine 和 Docker Compose'
|
||||||
|
file:
|
||||||
|
path: '{{ item }}'
|
||||||
|
state: absent
|
||||||
|
loop:
|
||||||
|
- /lib/systemd/system/docker.service
|
||||||
|
- /lib/systemd/system/docker.socket
|
||||||
|
- '{{ docker.dir.bin }}'
|
||||||
|
- '{{ docker.dir.data }}'
|
||||||
|
- '{{ flag }}'
|
||||||
|
|
||||||
|
when:
|
||||||
|
- cmd == "remove"
|
||||||
|
- not docker_ret.failed
|
16
prometheus/roles/docker/templates/daemon.json.j2
Normal file
16
prometheus/roles/docker/templates/daemon.json.j2
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
{
|
||||||
|
"exec-opts" : ["native.cgroupdriver=systemd"],
|
||||||
|
"log-level": "warn",
|
||||||
|
"log-driver": "json-file",
|
||||||
|
"log-opts": {
|
||||||
|
"max-size": "100m",
|
||||||
|
"max-file": "5"
|
||||||
|
},
|
||||||
|
"registry-mirrors": [
|
||||||
|
"https://dockerproxy.com",
|
||||||
|
"https://hub-mirror.c.163.com"
|
||||||
|
],
|
||||||
|
"bip": "10.21.21.1/24",
|
||||||
|
"data-root": "{{ docker.dir.data }}",
|
||||||
|
"live-restore": true
|
||||||
|
}
|
36
prometheus/roles/docker/templates/docker.service.j2
Normal file
36
prometheus/roles/docker/templates/docker.service.j2
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=Docker Application Container Engine
|
||||||
|
Documentation=https://docs.docker.com
|
||||||
|
After=network-online.target firewalld.service
|
||||||
|
Wants=network-online.target
|
||||||
|
Requires=docker.socket
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=notify
|
||||||
|
Environment=PATH={{ docker.dir.bin }}:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
|
||||||
|
# the default is not to use systemd for cgroups because the delegate issues still
|
||||||
|
# exists and systemd currently does not support the cgroup feature set required
|
||||||
|
# for containers run by docker
|
||||||
|
ExecStart={{ docker.dir.bin }}/dockerd -H unix://var/run/docker.sock
|
||||||
|
ExecReload=/bin/kill -s HUP
|
||||||
|
# Having non-zero Limit*s causes performance problems due to accounting overhead
|
||||||
|
# in the kernel. We recommend using cgroups to do container-local accounting.
|
||||||
|
LimitNOFILE=infinity
|
||||||
|
LimitNPROC=infinity
|
||||||
|
LimitCORE=infinity
|
||||||
|
# Uncomment TasksMax if your systemd version supports it.
|
||||||
|
# Only systemd 226 and above support this version.
|
||||||
|
#TasksMax=infinity
|
||||||
|
TimeoutStartSec=0
|
||||||
|
# set delegate yes so that systemd does not reset the cgroups of docker containers
|
||||||
|
Delegate=yes
|
||||||
|
# kill only the docker process, not all processes in the cgroup
|
||||||
|
KillMode=process
|
||||||
|
# restart the docker process if it exits prematurely
|
||||||
|
Restart=on-failure
|
||||||
|
StartLimitBurst=3
|
||||||
|
StartLimitInterval=60s
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
|
|
13
prometheus/roles/docker/templates/docker.socket.j2
Normal file
13
prometheus/roles/docker/templates/docker.socket.j2
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=Docker Socket for the API
|
||||||
|
PartOf=docker.service
|
||||||
|
|
||||||
|
[Socket]
|
||||||
|
ListenStream=/var/run/docker.sock
|
||||||
|
SocketMode=0660
|
||||||
|
SocketUser=root
|
||||||
|
SocketGroup=docker
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=sockets.target
|
||||||
|
|
@ -0,0 +1,2 @@
|
|||||||
|
---
|
||||||
|
flag: ~/.flag/{{ role_name }}
|
59
prometheus/roles/elasticsearch_exporter/tasks/main.yml
Normal file
59
prometheus/roles/elasticsearch_exporter/tasks/main.yml
Normal file
@ -0,0 +1,59 @@
|
|||||||
|
---
|
||||||
|
# 校验 Elasticsearch Exporter 是否安装
|
||||||
|
- name: '<{{ cmd | upper }}> | 校验 Elasticsearch Exporter 是否安装'
|
||||||
|
stat:
|
||||||
|
path: '{{ flag }}'
|
||||||
|
register: ret
|
||||||
|
|
||||||
|
# 安装 Elasticsearch Exporter
|
||||||
|
- block:
|
||||||
|
- name: '<{{ cmd | upper }}> | 创建 Elasticsearch Exporter 相关目录'
|
||||||
|
file:
|
||||||
|
path: '{{ elasticsearch_exporter.dir }}'
|
||||||
|
state: directory
|
||||||
|
|
||||||
|
- name: '<{{ cmd | upper }}> | 安装 Elasticsearch Exporter'
|
||||||
|
template:
|
||||||
|
src: '{{ item.src }}'
|
||||||
|
dest: '{{ item.dest }}'
|
||||||
|
loop:
|
||||||
|
- src: docker-compose.yml.j2
|
||||||
|
dest: '{{ elasticsearch_exporter.dir }}/docker-compose.yml'
|
||||||
|
|
||||||
|
- name: '<{{ cmd | upper }}> | 启动 Elasticsearch Exporter 容器'
|
||||||
|
shell: |
|
||||||
|
. /etc/profile
|
||||||
|
cd {{ elasticsearch_exporter.dir }}
|
||||||
|
docker-compose down
|
||||||
|
docker-compose up -d
|
||||||
|
|
||||||
|
# - name: '<{{ cmd | upper }}> | 等待 Elasticsearch Exporter 服务启动'
|
||||||
|
# wait_for:
|
||||||
|
# port: '{{ elasticsearch_exporter.port }}'
|
||||||
|
|
||||||
|
- name: '<{{ cmd | upper }}> | 创建 Elasticsearch Exporter 安装标记'
|
||||||
|
shell: |
|
||||||
|
set -ex
|
||||||
|
mkdir -p ~/.flag
|
||||||
|
touch {{ flag }}
|
||||||
|
|
||||||
|
when:
|
||||||
|
- cmd == "install"
|
||||||
|
- not ret.stat.exists
|
||||||
|
|
||||||
|
# 卸载 Elasticsearch Exporter
|
||||||
|
- block:
|
||||||
|
- name: '<{{ cmd | upper }}> | 卸载 Elasticsearch Exporter'
|
||||||
|
shell: |
|
||||||
|
. /etc/profile
|
||||||
|
cd {{ elasticsearch_exporter.dir }}
|
||||||
|
docker-compose down
|
||||||
|
|
||||||
|
- name: '<{{ cmd | upper }}> | 清除 Elasticsearch Exporter 相关文件'
|
||||||
|
shell: |
|
||||||
|
rm -rf {{ elasticsearch_exporter.dir }}
|
||||||
|
rm -rf {{ flag }}
|
||||||
|
|
||||||
|
when:
|
||||||
|
- cmd == "remove"
|
||||||
|
- ret.stat.exists
|
@ -0,0 +1,23 @@
|
|||||||
|
version: "3.9"
|
||||||
|
|
||||||
|
services:
|
||||||
|
elasticsearch-exporter:
|
||||||
|
image: {{ elasticsearch_exporter.image }}
|
||||||
|
container_name: {{ docker.network.name }}-elasticsearch-exporter
|
||||||
|
hostname: elasticsearch-exporter
|
||||||
|
restart: always
|
||||||
|
networks:
|
||||||
|
- {{ docker.network.name }}
|
||||||
|
{% for node in elasticsearch_exporter.nodes -%}
|
||||||
|
{% if node.host == inventory_hostname -%}
|
||||||
|
ports:
|
||||||
|
- {{ node.port }}:9114
|
||||||
|
command:
|
||||||
|
- "--es.uri=http://{{ node.url }}"
|
||||||
|
{% endif %}
|
||||||
|
{% endfor %}
|
||||||
|
|
||||||
|
networks:
|
||||||
|
{{ docker.network.name }}:
|
||||||
|
external: true
|
||||||
|
name: {{ docker.network.name }}
|
2
prometheus/roles/grafana/defaults/main.yml
Normal file
2
prometheus/roles/grafana/defaults/main.yml
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
---
|
||||||
|
flag: ~/.flag/{{ role_name }}
|
66
prometheus/roles/grafana/tasks/main.yml
Normal file
66
prometheus/roles/grafana/tasks/main.yml
Normal file
@ -0,0 +1,66 @@
|
|||||||
|
---
|
||||||
|
# 校验 Grafana 是否安装
|
||||||
|
- name: '<{{ cmd | upper }}> | 校验 Grafana 是否安装'
|
||||||
|
stat:
|
||||||
|
path: '{{ flag }}'
|
||||||
|
register: ret
|
||||||
|
|
||||||
|
# 安装 Grafana
|
||||||
|
- block:
|
||||||
|
- name: '<{{ cmd | upper }}> | 创建 Grafana 相关目录'
|
||||||
|
file:
|
||||||
|
path: '{{ item.value }}'
|
||||||
|
state: directory
|
||||||
|
loop: '{{ grafana.dir | dict2items }}'
|
||||||
|
|
||||||
|
- name: '<{{ cmd | upper }}> | 安装 Grafana'
|
||||||
|
template:
|
||||||
|
src: '{{ item.src }}'
|
||||||
|
dest: '{{ item.dest }}'
|
||||||
|
loop:
|
||||||
|
- src: docker-compose.yml.j2
|
||||||
|
dest: '{{ grafana.dir.main }}/docker-compose.yml'
|
||||||
|
- src: conf/grafana.ini.j2
|
||||||
|
dest: '{{ grafana.dir.conf }}/grafana.ini'
|
||||||
|
|
||||||
|
- name: '<{{ cmd | upper }}> | 启动 Grafana 容器'
|
||||||
|
shell: |
|
||||||
|
. /etc/profile
|
||||||
|
chown -R 472.472 {{ grafana.dir.data }} {{ grafana.dir.conf }}
|
||||||
|
cd {{ grafana.dir.main }}
|
||||||
|
docker-compose down
|
||||||
|
rm -rf data/*
|
||||||
|
docker-compose up -d
|
||||||
|
|
||||||
|
- name: '<{{ cmd | upper }}> | 等待 Grafana 服务启动'
|
||||||
|
wait_for:
|
||||||
|
port: '{{ grafana.port }}'
|
||||||
|
|
||||||
|
- name: '<{{ cmd | upper }}> | 创建 Grafana 安装标记'
|
||||||
|
shell: |
|
||||||
|
set -ex
|
||||||
|
mkdir -p ~/.flag
|
||||||
|
touch {{ flag }}
|
||||||
|
|
||||||
|
when:
|
||||||
|
- cmd == "install"
|
||||||
|
- not ret.stat.exists
|
||||||
|
- grafana.enable
|
||||||
|
|
||||||
|
# 卸载 Grafana
|
||||||
|
- block:
|
||||||
|
- name: '<{{ cmd | upper }}> | 卸载 Grafana'
|
||||||
|
shell: |
|
||||||
|
. /etc/profile
|
||||||
|
cd {{ grafana.dir.main }}
|
||||||
|
docker-compose down
|
||||||
|
|
||||||
|
- name: '<{{ cmd | upper }}> | 清除 Grafana 相关文件'
|
||||||
|
shell: |
|
||||||
|
rm -rf {{ grafana.dir.main }}
|
||||||
|
rm -rf {{ flag }}
|
||||||
|
|
||||||
|
when:
|
||||||
|
- cmd == "remove"
|
||||||
|
- ret.stat.exists
|
||||||
|
- grafana.enable
|
1170
prometheus/roles/grafana/templates/conf/grafana.ini.j2
Normal file
1170
prometheus/roles/grafana/templates/conf/grafana.ini.j2
Normal file
File diff suppressed because it is too large
Load Diff
19
prometheus/roles/grafana/templates/docker-compose.yml.j2
Normal file
19
prometheus/roles/grafana/templates/docker-compose.yml.j2
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
version: '3'
|
||||||
|
services:
|
||||||
|
grafana:
|
||||||
|
image: {{ grafana.image }}
|
||||||
|
container_name: {{ docker.network.name }}-grafana
|
||||||
|
hostname: grafana
|
||||||
|
restart: always
|
||||||
|
volumes:
|
||||||
|
- /etc/localtime:/etc/localtime:ro
|
||||||
|
- {{ grafana.dir.conf }}/grafana.ini:/etc/grafana/grafana.ini
|
||||||
|
- {{ grafana.dir.data }}:/var/lib/grafana
|
||||||
|
networks:
|
||||||
|
- {{ docker.network.name }}
|
||||||
|
ports:
|
||||||
|
- {{ grafana.port }}:3000
|
||||||
|
networks:
|
||||||
|
{{ docker.network.name }}:
|
||||||
|
external: true
|
||||||
|
name: {{ docker.network.name }}
|
2
prometheus/roles/jmx_exporter/defaults/main.yml
Normal file
2
prometheus/roles/jmx_exporter/defaults/main.yml
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
---
|
||||||
|
flag: ~/.flag/{{ role_name }}
|
Binary file not shown.
Binary file not shown.
69
prometheus/roles/jmx_exporter/tasks/main.yml
Normal file
69
prometheus/roles/jmx_exporter/tasks/main.yml
Normal file
@ -0,0 +1,69 @@
|
|||||||
|
---
|
||||||
|
# 校验 JMX Exporter 是否安装
|
||||||
|
- name: '<{{ cmd | upper }}> | 校验 JMX Exporter 是否安装'
|
||||||
|
stat:
|
||||||
|
path: '{{ flag }}'
|
||||||
|
register: ret
|
||||||
|
|
||||||
|
# 安装 JMX Exporter
|
||||||
|
- block:
|
||||||
|
- name: '<{{ cmd | upper }}> | 创建 JMX Exporter 相关目录'
|
||||||
|
file:
|
||||||
|
path: '{{ item.value }}'
|
||||||
|
state: directory
|
||||||
|
loop: '{{ jmx_exporter.dir | dict2items }}'
|
||||||
|
|
||||||
|
- name: '<{{ cmd | upper }}> | 准备 JMX Exporter Jar 文件'
|
||||||
|
copy:
|
||||||
|
src: files/{{ jmx_exporter.jar }}
|
||||||
|
dest: '{{ jmx_exporter.dir.main }}/{{ jmx_exporter.jar }}'
|
||||||
|
|
||||||
|
- name: '<{{ cmd | upper }}> | 安装 JMX Exporter'
|
||||||
|
template:
|
||||||
|
src: '{{ item.src }}'
|
||||||
|
dest: '{{ item.dest }}'
|
||||||
|
loop:
|
||||||
|
- src: docker-compose.yml.{{ jmx_exporter.model }}.j2
|
||||||
|
dest: '{{ jmx_exporter.dir.main }}/docker-compose.yml'
|
||||||
|
- src: conf/config.yaml.{{ jmx_exporter.model }}.j2
|
||||||
|
dest: '{{ jmx_exporter.dir.conf }}/config.yaml'
|
||||||
|
|
||||||
|
- name: '<{{ cmd | upper }}> | 启动 JMX Exporter 容器'
|
||||||
|
shell: |
|
||||||
|
. /etc/profile
|
||||||
|
cd {{ jmx_exporter.dir.main }}
|
||||||
|
docker-compose down
|
||||||
|
docker-compose up -d
|
||||||
|
|
||||||
|
# - name: '<{{ cmd | upper }}> | 等待 JMX Exporter 服务启动'
|
||||||
|
# wait_for:
|
||||||
|
# port: '{{ jmx_exporter.port }}'
|
||||||
|
|
||||||
|
- name: '<{{ cmd | upper }}> | 创建 JMX Exporter 安装标记'
|
||||||
|
shell: |
|
||||||
|
set -ex
|
||||||
|
mkdir -p ~/.flag
|
||||||
|
touch {{ flag }}
|
||||||
|
|
||||||
|
when:
|
||||||
|
- cmd == "install"
|
||||||
|
- not ret.stat.exists
|
||||||
|
- ansible_architecture == "x86_64"
|
||||||
|
|
||||||
|
# 卸载 JMX Exporter
|
||||||
|
- block:
|
||||||
|
- name: '<{{ cmd | upper }}> | 卸载 JMX Exporter'
|
||||||
|
shell: |
|
||||||
|
. /etc/profile
|
||||||
|
cd {{ jmx_exporter.dir.main }}
|
||||||
|
docker-compose down
|
||||||
|
|
||||||
|
- name: '<{{ cmd | upper }}> | 清除 JMX Exporter 相关文件'
|
||||||
|
shell: |
|
||||||
|
rm -rf {{ jmx_exporter.dir.main }}
|
||||||
|
rm -rf {{ flag }}
|
||||||
|
|
||||||
|
when:
|
||||||
|
- cmd == "remove"
|
||||||
|
- ret.stat.exists
|
||||||
|
- - ansible_architecture == "x86_64"
|
@ -0,0 +1,7 @@
|
|||||||
|
{% for node in jmx_exporter.nodes -%}
|
||||||
|
{% if node.host == inventory_hostname -%}
|
||||||
|
hostPort: {{ node.url }}
|
||||||
|
{% endif %}
|
||||||
|
{% endfor %}
|
||||||
|
rules:
|
||||||
|
- pattern: ".*"
|
@ -0,0 +1,2 @@
|
|||||||
|
rules:
|
||||||
|
- pattern: ".*"
|
@ -0,0 +1,27 @@
|
|||||||
|
version: "3.9"
|
||||||
|
|
||||||
|
services:
|
||||||
|
jmx-exporter:
|
||||||
|
image: {{ jmx_exporter.image }}
|
||||||
|
container_name: {{ docker.network.name }}-jmx-exporter
|
||||||
|
hostname: jmx-exporter
|
||||||
|
restart: always
|
||||||
|
privileged: true
|
||||||
|
networks:
|
||||||
|
- {{ docker.network.name }}
|
||||||
|
{% for node in jmx_exporter.nodes -%}
|
||||||
|
{% if node.host == inventory_hostname -%}
|
||||||
|
ports:
|
||||||
|
- {{ node.port }}:{{ node.port }}
|
||||||
|
volumes:
|
||||||
|
- /etc/localtime:/etc/localtime:ro
|
||||||
|
- {{ jmx_exporter.dir.main }}/{{ jmx_exporter.jar }}:/jmx-exporter/jmx_prometheus_{{ jmx_exporter.model }}-0.17.2.jar
|
||||||
|
- {{ jmx_exporter.dir.main }}/conf/config.yaml:/jmx-exporter/config.yaml
|
||||||
|
command: "java -jar /jmx-exporter/jmx_prometheus_{{ jmx_exporter.model }}-0.17.2.jar {{ node.port }} /jmx-exporter/config.yaml"
|
||||||
|
{% endif %}
|
||||||
|
{% endfor %}
|
||||||
|
|
||||||
|
networks:
|
||||||
|
{{ docker.network.name }}:
|
||||||
|
external: true
|
||||||
|
name: {{ docker.network.name }}
|
@ -0,0 +1,28 @@
|
|||||||
|
version: "3.9"
|
||||||
|
|
||||||
|
services:
|
||||||
|
jmx-exporter:
|
||||||
|
image: {{ jmx_exporter.image }}
|
||||||
|
container_name: {{ docker.network.name }}-jmx-exporter
|
||||||
|
hostname: jmx-exporter
|
||||||
|
restart: always
|
||||||
|
privileged: true
|
||||||
|
networks:
|
||||||
|
- {{ docker.network.name }}
|
||||||
|
{% for node in jmx_exporter.nodes -%}
|
||||||
|
{% if node.host == inventory_hostname -%}
|
||||||
|
ports:
|
||||||
|
- {{ node.port }}:{{ node.port }}
|
||||||
|
volumes:
|
||||||
|
- /etc/localtime:/etc/localtime:ro
|
||||||
|
- {{ jmx_exporter.dir.main }}/{{ jmx_exporter.jar }}:/jmx-exporter/jmx_prometheus_{{ jmx_exporter.model }}-0.17.2.jar
|
||||||
|
- {{ jmx_exporter.dir.main }}/conf/config.yaml:/jmx-exporter/config.yaml
|
||||||
|
environment:
|
||||||
|
- "JAVA_OPTS=-server -Dname=jmxExporterTest -Duser.timezone=GMT+08 -Xms1024m -Xmx2048m -Xss512k -Djava.awt.headless=true -Djava.security.egd=file:/dev/./urandom -Dfile.encoding=UTF-8 -Djava.net.preferIPv4Stack=true -javaagent:/jmx-exporter/jmx_prometheus_{{ jmx_exporter.model }}-0.17.2.jar={{ node.port }}:/jmx-exporter/config.yaml"
|
||||||
|
{% endif %}
|
||||||
|
{% endfor %}
|
||||||
|
|
||||||
|
networks:
|
||||||
|
{{ docker.network.name }}:
|
||||||
|
external: true
|
||||||
|
name: {{ docker.network.name }}
|
2
prometheus/roles/loki/defaults/main.yml
Normal file
2
prometheus/roles/loki/defaults/main.yml
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
---
|
||||||
|
flag: ~/.flag/{{ role_name }}
|
65
prometheus/roles/loki/tasks/main.yml
Normal file
65
prometheus/roles/loki/tasks/main.yml
Normal file
@ -0,0 +1,65 @@
|
|||||||
|
---
|
||||||
|
# 校验 Loki 是否安装
|
||||||
|
- name: '<{{ cmd | upper }}> | 校验 Loki 是否安装'
|
||||||
|
stat:
|
||||||
|
path: '{{ flag }}'
|
||||||
|
register: ret
|
||||||
|
|
||||||
|
# 安装 Loki
|
||||||
|
- block:
|
||||||
|
- name: '<{{ cmd | upper }}> | 创建 Loki 相关目录'
|
||||||
|
file:
|
||||||
|
path: '{{ item.value }}'
|
||||||
|
state: directory
|
||||||
|
loop: '{{ loki.dir | dict2items }}'
|
||||||
|
|
||||||
|
- name: '<{{ cmd | upper }}> | 安装 Loki'
|
||||||
|
template:
|
||||||
|
src: '{{ item.src }}'
|
||||||
|
dest: '{{ item.dest }}'
|
||||||
|
loop:
|
||||||
|
- src: docker-compose.yml.j2
|
||||||
|
dest: '{{ loki.dir.main }}/docker-compose.yml'
|
||||||
|
- src: conf/loki-config.yaml.j2
|
||||||
|
dest: '{{ loki.dir.conf }}/loki-config.yaml'
|
||||||
|
|
||||||
|
- name: '<{{ cmd | upper }}> | 启动 Loki 容器'
|
||||||
|
shell: |
|
||||||
|
. /etc/profile
|
||||||
|
chown -R 10001.10001 {{ loki.dir.conf }}
|
||||||
|
cd {{ loki.dir.main }}
|
||||||
|
docker-compose down
|
||||||
|
docker-compose up -d
|
||||||
|
|
||||||
|
- name: '<{{ cmd | upper }}> | 等待 Loki 服务启动'
|
||||||
|
wait_for:
|
||||||
|
port: '{{ loki.port }}'
|
||||||
|
|
||||||
|
- name: '<{{ cmd | upper }}> | 创建 Loki 安装标记'
|
||||||
|
shell: |
|
||||||
|
set -ex
|
||||||
|
mkdir -p ~/.flag
|
||||||
|
touch {{ flag }}
|
||||||
|
|
||||||
|
when:
|
||||||
|
- cmd == "install"
|
||||||
|
- not ret.stat.exists
|
||||||
|
- loki.enable
|
||||||
|
|
||||||
|
# 卸载 Loki
|
||||||
|
- block:
|
||||||
|
- name: '<{{ cmd | upper }}> | 卸载 Loki'
|
||||||
|
shell: |
|
||||||
|
. /etc/profile
|
||||||
|
cd {{ loki.dir.main }}
|
||||||
|
docker-compose down
|
||||||
|
|
||||||
|
- name: '<{{ cmd | upper }}> | 清除 Loki 相关文件'
|
||||||
|
shell: |
|
||||||
|
rm -rf {{ loki.dir.main }}
|
||||||
|
rm -rf {{ flag }}
|
||||||
|
|
||||||
|
when:
|
||||||
|
- cmd == "remove"
|
||||||
|
- ret.stat.exists
|
||||||
|
- loki.enable
|
30
prometheus/roles/loki/templates/conf/loki-config.yaml.j2
Normal file
30
prometheus/roles/loki/templates/conf/loki-config.yaml.j2
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
auth_enabled: false
|
||||||
|
|
||||||
|
server:
|
||||||
|
http_listen_port: 3100
|
||||||
|
grpc_listen_port: 9096
|
||||||
|
|
||||||
|
common:
|
||||||
|
path_prefix: /tmp/loki
|
||||||
|
storage:
|
||||||
|
filesystem:
|
||||||
|
chunks_directory: /tmp/loki/chunks
|
||||||
|
rules_directory: /tmp/loki/rules
|
||||||
|
replication_factor: 1
|
||||||
|
ring:
|
||||||
|
instance_addr: 127.0.0.1
|
||||||
|
kvstore:
|
||||||
|
store: inmemory
|
||||||
|
|
||||||
|
schema_config:
|
||||||
|
configs:
|
||||||
|
- from: 2020-10-24
|
||||||
|
store: boltdb-shipper
|
||||||
|
object_store: filesystem
|
||||||
|
schema: v11
|
||||||
|
index:
|
||||||
|
prefix: index_
|
||||||
|
period: 24h
|
||||||
|
|
||||||
|
ruler:
|
||||||
|
alertmanager_url: http://{{ groups.server.0 }}:{{ alertmanager.port }}
|
21
prometheus/roles/loki/templates/docker-compose.yml.j2
Normal file
21
prometheus/roles/loki/templates/docker-compose.yml.j2
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
version: "3.9"
|
||||||
|
|
||||||
|
services:
|
||||||
|
loki:
|
||||||
|
image: {{ loki.image }}
|
||||||
|
container_name: {{ docker.network.name }}-loki
|
||||||
|
hostname: loki
|
||||||
|
restart: always
|
||||||
|
volumes:
|
||||||
|
- /etc/localtime:/etc/localtime:ro
|
||||||
|
- {{ loki.dir.conf }}/loki-config.yaml:/etc/loki/loki-config.yaml
|
||||||
|
networks:
|
||||||
|
- {{ docker.network.name }}
|
||||||
|
ports:
|
||||||
|
- {{ loki.port }}:3100
|
||||||
|
command: "-config.file=/etc/loki/loki-config.yaml"
|
||||||
|
|
||||||
|
networks:
|
||||||
|
{{ docker.network.name }}:
|
||||||
|
external: true
|
||||||
|
name: {{ docker.network.name }}
|
2
prometheus/roles/mongodb_exporter/defaults/main.yml
Normal file
2
prometheus/roles/mongodb_exporter/defaults/main.yml
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
---
|
||||||
|
flag: ~/.flag/{{ role_name }}
|
61
prometheus/roles/mongodb_exporter/tasks/main.yml
Normal file
61
prometheus/roles/mongodb_exporter/tasks/main.yml
Normal file
@ -0,0 +1,61 @@
|
|||||||
|
---
|
||||||
|
# 校验 MongoDB Exporter 是否安装
|
||||||
|
- name: '<{{ cmd | upper }}> | 校验 MongoDB Exporter 是否安装'
|
||||||
|
stat:
|
||||||
|
path: '{{ flag }}'
|
||||||
|
register: ret
|
||||||
|
|
||||||
|
# 安装 MongoDB Exporter
|
||||||
|
- block:
|
||||||
|
- name: '<{{ cmd | upper }}> | 创建 MongoDB Exporter 相关目录'
|
||||||
|
file:
|
||||||
|
path: '{{ mongodb_exporter.dir }}'
|
||||||
|
state: directory
|
||||||
|
|
||||||
|
- name: '<{{ cmd | upper }}> | 安装 MongoDB Exporter'
|
||||||
|
template:
|
||||||
|
src: '{{ item.src }}'
|
||||||
|
dest: '{{ item.dest }}'
|
||||||
|
loop:
|
||||||
|
- src: docker-compose.yml.j2
|
||||||
|
dest: '{{ mongodb_exporter.dir }}/docker-compose.yml'
|
||||||
|
|
||||||
|
- name: '<{{ cmd | upper }}> | 启动 MongoDB Exporter 容器'
|
||||||
|
shell: |
|
||||||
|
. /etc/profile
|
||||||
|
cd {{ mongodb_exporter.dir }}
|
||||||
|
docker-compose down
|
||||||
|
docker-compose up -d
|
||||||
|
|
||||||
|
# - name: '<{{ cmd | upper }}> | 等待 MongoDB Exporter 服务启动'
|
||||||
|
# wait_for:
|
||||||
|
# port: '{{ mongodb_exporter.port }}'
|
||||||
|
|
||||||
|
- name: '<{{ cmd | upper }}> | 创建 MongoDB Exporter 安装标记'
|
||||||
|
shell: |
|
||||||
|
set -ex
|
||||||
|
mkdir -p ~/.flag
|
||||||
|
touch {{ flag }}
|
||||||
|
|
||||||
|
when:
|
||||||
|
- cmd == "install"
|
||||||
|
- not ret.stat.exists
|
||||||
|
- ansible_architecture == "x86_64"
|
||||||
|
|
||||||
|
# 卸载 MongoDB Exporter
|
||||||
|
- block:
|
||||||
|
- name: '<{{ cmd | upper }}> | 卸载 MongoDB Exporter'
|
||||||
|
shell: |
|
||||||
|
. /etc/profile
|
||||||
|
cd {{ mongodb_exporter.dir }}
|
||||||
|
docker-compose down
|
||||||
|
|
||||||
|
- name: '<{{ cmd | upper }}> | 清除 MongoDB Exporter 相关文件'
|
||||||
|
shell: |
|
||||||
|
rm -rf {{ mongodb_exporter.dir }}
|
||||||
|
rm -rf {{ flag }}
|
||||||
|
|
||||||
|
when:
|
||||||
|
- cmd == "remove"
|
||||||
|
- ret.stat.exists
|
||||||
|
- ansible_architecture == "x86_64"
|
@ -0,0 +1,23 @@
|
|||||||
|
version: "3.9"
|
||||||
|
|
||||||
|
services:
|
||||||
|
mongodb-exporter:
|
||||||
|
image: {{ mongodb_exporter.image }}
|
||||||
|
container_name: {{ docker.network.name }}-mongodb-exporter
|
||||||
|
hostname: mongodb-exporter
|
||||||
|
restart: always
|
||||||
|
networks:
|
||||||
|
- {{ docker.network.name }}
|
||||||
|
{% for node in mongodb_exporter.nodes -%}
|
||||||
|
{% if node.host == inventory_hostname -%}
|
||||||
|
ports:
|
||||||
|
- {{ node.port }}:9126
|
||||||
|
command:
|
||||||
|
- '--mongodb.uri=mongodb://{{ node.url }}'
|
||||||
|
{% endif %}
|
||||||
|
{% endfor %}
|
||||||
|
|
||||||
|
networks:
|
||||||
|
{{ docker.network.name }}:
|
||||||
|
external: true
|
||||||
|
name: {{ docker.network.name }}
|
2
prometheus/roles/mysqld_exporter/defaults/main.yml
Normal file
2
prometheus/roles/mysqld_exporter/defaults/main.yml
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
---
|
||||||
|
flag: ~/.flag/{{ role_name }}
|
59
prometheus/roles/mysqld_exporter/tasks/main.yml
Normal file
59
prometheus/roles/mysqld_exporter/tasks/main.yml
Normal file
@ -0,0 +1,59 @@
|
|||||||
|
---
|
||||||
|
# 校验 Mysqld Exporter 是否安装
|
||||||
|
- name: '<{{ cmd | upper }}> | 校验 Mysqld Exporter 是否安装'
|
||||||
|
stat:
|
||||||
|
path: '{{ flag }}'
|
||||||
|
register: ret
|
||||||
|
|
||||||
|
# 安装 Mysqld Exporter
|
||||||
|
- block:
|
||||||
|
- name: '<{{ cmd | upper }}> | 创建 Mysqld Exporter 相关目录'
|
||||||
|
file:
|
||||||
|
path: '{{ mysqld_exporter.dir }}'
|
||||||
|
state: directory
|
||||||
|
|
||||||
|
- name: '<{{ cmd | upper }}> | 安装 Mysqld Exporter'
|
||||||
|
template:
|
||||||
|
src: '{{ item.src }}'
|
||||||
|
dest: '{{ item.dest }}'
|
||||||
|
loop:
|
||||||
|
- src: docker-compose.yml.j2
|
||||||
|
dest: '{{ mysqld_exporter.dir }}/docker-compose.yml'
|
||||||
|
|
||||||
|
- name: '<{{ cmd | upper }}> | 启动 Mysqld Exporter 容器'
|
||||||
|
shell: |
|
||||||
|
. /etc/profile
|
||||||
|
cd {{ mysqld_exporter.dir }}
|
||||||
|
docker-compose down
|
||||||
|
docker-compose up -d
|
||||||
|
|
||||||
|
# - name: '<{{ cmd | upper }}> | 等待 Mysqld Exporter 服务启动'
|
||||||
|
# wait_for:
|
||||||
|
# port: '{{ mysqld_exporter.port }}'
|
||||||
|
|
||||||
|
- name: '<{{ cmd | upper }}> | 创建 Mysqld Exporter 安装标记'
|
||||||
|
shell: |
|
||||||
|
set -ex
|
||||||
|
mkdir -p ~/.flag
|
||||||
|
touch {{ flag }}
|
||||||
|
|
||||||
|
when:
|
||||||
|
- cmd == "install"
|
||||||
|
- not ret.stat.exists
|
||||||
|
|
||||||
|
# 卸载 Mysqld Exporter
|
||||||
|
- block:
|
||||||
|
- name: '<{{ cmd | upper }}> | 卸载 Mysqld Exporter'
|
||||||
|
shell: |
|
||||||
|
. /etc/profile
|
||||||
|
cd {{ mysqld_exporter.dir }}
|
||||||
|
docker-compose down
|
||||||
|
|
||||||
|
- name: '<{{ cmd | upper }}> | 清除 Mysqld Exporter 相关文件'
|
||||||
|
shell: |
|
||||||
|
rm -rf {{ mysqld_exporter.dir }}
|
||||||
|
rm -rf {{ flag }}
|
||||||
|
|
||||||
|
when:
|
||||||
|
- cmd == "remove"
|
||||||
|
- ret.stat.exists
|
@ -0,0 +1,23 @@
|
|||||||
|
version: "3.9"
|
||||||
|
|
||||||
|
services:
|
||||||
|
mysqld-exporter:
|
||||||
|
image: {{ mysqld_exporter.image }}
|
||||||
|
container_name: {{ docker.network.name }}-mysqld-exporter
|
||||||
|
hostname: mysqld-exporter
|
||||||
|
restart: always
|
||||||
|
networks:
|
||||||
|
- {{ docker.network.name }}
|
||||||
|
{% for node in mysqld_exporter.nodes -%}
|
||||||
|
{% if node.host == inventory_hostname -%}
|
||||||
|
ports:
|
||||||
|
- {{ node.port }}:9104
|
||||||
|
environment:
|
||||||
|
- DATA_SOURCE_NAME={{ node.user }}:{{ node.password }}@({{ node.url }})/{{ node.database }}
|
||||||
|
{% endif %}
|
||||||
|
{% endfor %}
|
||||||
|
|
||||||
|
networks:
|
||||||
|
{{ docker.network.name }}:
|
||||||
|
external: true
|
||||||
|
name: {{ docker.network.name }}
|
@ -0,0 +1,2 @@
|
|||||||
|
---
|
||||||
|
flag: ~/.flag/{{ role_name }}
|
59
prometheus/roles/nginx_prometheus_exporter/tasks/main.yml
Normal file
59
prometheus/roles/nginx_prometheus_exporter/tasks/main.yml
Normal file
@ -0,0 +1,59 @@
|
|||||||
|
---
|
||||||
|
# 校验 Nginx Prometheus Exporter 是否安装
|
||||||
|
- name: '<{{ cmd | upper }}> | 校验 Nginx Prometheus Exporter 是否安装'
|
||||||
|
stat:
|
||||||
|
path: '{{ flag }}'
|
||||||
|
register: ret
|
||||||
|
|
||||||
|
# 安装 Nginx Prometheus Exporter
|
||||||
|
- block:
|
||||||
|
- name: '<{{ cmd | upper }}> | 创建 Nginx Prometheus Exporter 相关目录'
|
||||||
|
file:
|
||||||
|
path: '{{ nginx_prometheus_exporter.dir }}'
|
||||||
|
state: directory
|
||||||
|
|
||||||
|
- name: '<{{ cmd | upper }}> | 安装 Nginx Prometheus Exporter'
|
||||||
|
template:
|
||||||
|
src: '{{ item.src }}'
|
||||||
|
dest: '{{ item.dest }}'
|
||||||
|
loop:
|
||||||
|
- src: docker-compose.yml.j2
|
||||||
|
dest: '{{ nginx_prometheus_exporter.dir }}/docker-compose.yml'
|
||||||
|
|
||||||
|
- name: '<{{ cmd | upper }}> | 启动 Nginx Prometheus Exporter 容器'
|
||||||
|
shell: |
|
||||||
|
. /etc/profile
|
||||||
|
cd {{ nginx_prometheus_exporter.dir }}
|
||||||
|
docker-compose down
|
||||||
|
docker-compose up -d
|
||||||
|
|
||||||
|
# - name: '<{{ cmd | upper }}> | 等待 Nginx Prometheus Exporter 服务启动'
|
||||||
|
# wait_for:
|
||||||
|
# port: '{{ nginx_prometheus_exporter.port }}'
|
||||||
|
|
||||||
|
- name: '<{{ cmd | upper }}> | 创建 Nginx Prometheus Exporter 安装标记'
|
||||||
|
shell: |
|
||||||
|
set -ex
|
||||||
|
mkdir -p ~/.flag
|
||||||
|
touch {{ flag }}
|
||||||
|
|
||||||
|
when:
|
||||||
|
- cmd == "install"
|
||||||
|
- not ret.stat.exists
|
||||||
|
|
||||||
|
# 卸载 Nginx Prometheus Exporter
|
||||||
|
- block:
|
||||||
|
- name: '<{{ cmd | upper }}> | 卸载 Nginx Prometheus Exporter'
|
||||||
|
shell: |
|
||||||
|
. /etc/profile
|
||||||
|
cd {{ nginx_prometheus_exporter.dir }}
|
||||||
|
docker-compose down
|
||||||
|
|
||||||
|
- name: '<{{ cmd | upper }}> | 清除 Nginx Prometheus Exporter 相关文件'
|
||||||
|
shell: |
|
||||||
|
rm -rf {{ nginx_prometheus_exporter.dir }}
|
||||||
|
rm -rf {{ flag }}
|
||||||
|
|
||||||
|
when:
|
||||||
|
- cmd == "remove"
|
||||||
|
- ret.stat.exists
|
@ -0,0 +1,25 @@
|
|||||||
|
version: "3.9"
|
||||||
|
|
||||||
|
services:
|
||||||
|
nginx-prometheus-exporter:
|
||||||
|
image: {{ nginx_prometheus_exporter.image }}
|
||||||
|
container_name: {{ docker.network.name }}-nginx-prometheus-exporter
|
||||||
|
hostname: nginx-prometheus-exporter
|
||||||
|
restart: always
|
||||||
|
privileged: true
|
||||||
|
networks:
|
||||||
|
- {{ docker.network.name }}
|
||||||
|
{% for node in nginx_prometheus_exporter.nodes -%}
|
||||||
|
{% if node.host == inventory_hostname -%}
|
||||||
|
ports:
|
||||||
|
- {{ node.port }}:9113
|
||||||
|
volumes:
|
||||||
|
- /etc/localtime:/etc/localtime:ro
|
||||||
|
command: "-nginx.scrape-uri={{ node.url }}"
|
||||||
|
{% endif %}
|
||||||
|
{% endfor %}
|
||||||
|
|
||||||
|
networks:
|
||||||
|
{{ docker.network.name }}:
|
||||||
|
external: true
|
||||||
|
name: {{ docker.network.name }}
|
2
prometheus/roles/node_exporter/defaults/main.yml
Normal file
2
prometheus/roles/node_exporter/defaults/main.yml
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
---
|
||||||
|
flag: ~/.flag/{{ role_name }}
|
59
prometheus/roles/node_exporter/tasks/main.yml
Normal file
59
prometheus/roles/node_exporter/tasks/main.yml
Normal file
@ -0,0 +1,59 @@
|
|||||||
|
---
|
||||||
|
# 校验 Node Exporter 是否安装
|
||||||
|
- name: '<{{ cmd | upper }}> | 校验 Node Exporter 是否安装'
|
||||||
|
stat:
|
||||||
|
path: '{{ flag }}'
|
||||||
|
register: ret
|
||||||
|
|
||||||
|
# 安装 Node Exporter
|
||||||
|
- block:
|
||||||
|
- name: '<{{ cmd | upper }}> | 创建 Node Exporter 相关目录'
|
||||||
|
file:
|
||||||
|
path: '{{ node_exporter.dir }}'
|
||||||
|
state: directory
|
||||||
|
|
||||||
|
- name: '<{{ cmd | upper }}> | 安装 Node Exporter'
|
||||||
|
template:
|
||||||
|
src: '{{ item.src }}'
|
||||||
|
dest: '{{ item.dest }}'
|
||||||
|
loop:
|
||||||
|
- src: docker-compose.yml.j2
|
||||||
|
dest: '{{ node_exporter.dir }}/docker-compose.yml'
|
||||||
|
|
||||||
|
- name: '<{{ cmd | upper }}> | 启动 Node Exporter 容器'
|
||||||
|
shell: |
|
||||||
|
. /etc/profile
|
||||||
|
cd {{ node_exporter.dir }}
|
||||||
|
docker-compose down
|
||||||
|
docker-compose up -d
|
||||||
|
|
||||||
|
- name: '<{{ cmd | upper }}> | 等待 Node Exporter 服务启动'
|
||||||
|
wait_for:
|
||||||
|
port: '{{ node_exporter.port }}'
|
||||||
|
|
||||||
|
- name: '<{{ cmd | upper }}> | 创建 Node Exporter 安装标记'
|
||||||
|
shell: |
|
||||||
|
set -ex
|
||||||
|
mkdir -p ~/.flag
|
||||||
|
touch {{ flag }}
|
||||||
|
|
||||||
|
when:
|
||||||
|
- cmd == "install"
|
||||||
|
- not ret.stat.exists
|
||||||
|
|
||||||
|
# 卸载 Node Exporter
|
||||||
|
- block:
|
||||||
|
- name: '<{{ cmd | upper }}> | 卸载 Node Exporter'
|
||||||
|
shell: |
|
||||||
|
. /etc/profile
|
||||||
|
cd {{ node_exporter.dir }}
|
||||||
|
docker-compose down
|
||||||
|
|
||||||
|
- name: '<{{ cmd | upper }}> | 清除 Node Exporter 相关文件'
|
||||||
|
shell: |
|
||||||
|
rm -rf {{ node_exporter.dir }}
|
||||||
|
rm -rf {{ flag }}
|
||||||
|
|
||||||
|
when:
|
||||||
|
- cmd == "remove"
|
||||||
|
- ret.stat.exists
|
@ -0,0 +1,19 @@
|
|||||||
|
version: "3.9"
|
||||||
|
|
||||||
|
services:
|
||||||
|
node-exporter:
|
||||||
|
image: {{ node_exporter.image }}
|
||||||
|
container_name: {{ docker.network.name }}-node-exporter
|
||||||
|
hostname: node-exporter
|
||||||
|
restart: always
|
||||||
|
volumes:
|
||||||
|
- /etc/localtime:/etc/localtime:ro
|
||||||
|
networks:
|
||||||
|
- {{ docker.network.name }}
|
||||||
|
ports:
|
||||||
|
- {{ node_exporter.port }}:9100
|
||||||
|
|
||||||
|
networks:
|
||||||
|
{{ docker.network.name }}:
|
||||||
|
external: true
|
||||||
|
name: {{ docker.network.name }}
|
2
prometheus/roles/prometheus/defaults/main.yml
Normal file
2
prometheus/roles/prometheus/defaults/main.yml
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
---
|
||||||
|
flag: ~/.flag/{{ role_name }}
|
11
prometheus/roles/prometheus/files/rules/blackbox.yml
Normal file
11
prometheus/roles/prometheus/files/rules/blackbox.yml
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
groups:
|
||||||
|
- name: Blackbox
|
||||||
|
rules:
|
||||||
|
- alert: Blackbox 连接失败
|
||||||
|
expr: probe_success == 0
|
||||||
|
for: 30s
|
||||||
|
labels:
|
||||||
|
severity: emergency
|
||||||
|
annotations:
|
||||||
|
summary: Blackbox ({{ $labels.instance }}) 连接失败
|
||||||
|
description: "Blackbox {{ $labels.instance }} 连接失败!"
|
11
prometheus/roles/prometheus/files/rules/docker.yml
Normal file
11
prometheus/roles/prometheus/files/rules/docker.yml
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
groups:
|
||||||
|
- name: Docker
|
||||||
|
rules:
|
||||||
|
- alert: Docker 连接失败
|
||||||
|
expr: up{type="docker"} == 0
|
||||||
|
for: 30s
|
||||||
|
labels:
|
||||||
|
severity: emergency
|
||||||
|
annotations:
|
||||||
|
summary: Docker ({{ $labels.instance }}) 连接失败
|
||||||
|
description: "Docker {{ $labels.instance }} 连接失败!"
|
11
prometheus/roles/prometheus/files/rules/elasticsearch.yml
Normal file
11
prometheus/roles/prometheus/files/rules/elasticsearch.yml
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
groups:
|
||||||
|
- name: ElasticSearch
|
||||||
|
rules:
|
||||||
|
- alert: ElasticSearch 连接失败
|
||||||
|
expr: up{type="elasticsearch"} == 0
|
||||||
|
for: 30s
|
||||||
|
labels:
|
||||||
|
severity: emergency
|
||||||
|
annotations:
|
||||||
|
summary: ElasticSearch ({{ $labels.instance }}) 连接失败
|
||||||
|
description: "ElasticSearch {{ $labels.instance }} 连接失败!"
|
11
prometheus/roles/prometheus/files/rules/mongodb.yml
Normal file
11
prometheus/roles/prometheus/files/rules/mongodb.yml
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
groups:
|
||||||
|
- name: MongoDB
|
||||||
|
rules:
|
||||||
|
- alert: MongoDB 连接失败
|
||||||
|
expr: up{type="mongodb"} == 0
|
||||||
|
for: 30s
|
||||||
|
labels:
|
||||||
|
severity: emergency
|
||||||
|
annotations:
|
||||||
|
summary: MongoDB ({{ $labels.instance }}) 连接失败
|
||||||
|
description: "MongoDB {{ $labels.instance }} 连接失败!"
|
11
prometheus/roles/prometheus/files/rules/mysql.yml
Normal file
11
prometheus/roles/prometheus/files/rules/mysql.yml
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
groups:
|
||||||
|
- name: MySQL
|
||||||
|
rules:
|
||||||
|
- alert: MySQL 连接失败
|
||||||
|
expr: up{type="mysql"} == 0
|
||||||
|
for: 30s
|
||||||
|
labels:
|
||||||
|
severity: emergency
|
||||||
|
annotations:
|
||||||
|
summary: MySQL ({{ $labels.instance }}) 连接失败
|
||||||
|
description: "MySQL {{ $labels.instance }} 连接失败!"
|
35
prometheus/roles/prometheus/files/rules/node.yml
Normal file
35
prometheus/roles/prometheus/files/rules/node.yml
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
groups:
|
||||||
|
- name: Node
|
||||||
|
rules:
|
||||||
|
- alert: 主机连接失败
|
||||||
|
expr: up{type="node"} == 0
|
||||||
|
for: 30s
|
||||||
|
labels:
|
||||||
|
severity: emergency
|
||||||
|
annotations:
|
||||||
|
summary: 主机 ({{ $labels.instance }}) 连接失败
|
||||||
|
description: "主机 {{ $labels.instance }} 连接失败!"
|
||||||
|
- alert: 主机 CPU 负载过高
|
||||||
|
expr: sum by (instance) (avg by (mode, instance) (rate(node_cpu_seconds_total{mode!="idle"}[2m]))) > 0.8
|
||||||
|
for: 0m
|
||||||
|
labels:
|
||||||
|
severity: warning
|
||||||
|
annotations:
|
||||||
|
summary: 主机 ({{ $labels.instance }}) CPU 负载过高
|
||||||
|
description: "主机 {{ $labels.instance }} CPU 负载高于 80%!"
|
||||||
|
- alert: 主机内存不足
|
||||||
|
expr: node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes * 100 < 20
|
||||||
|
for: 2m
|
||||||
|
labels:
|
||||||
|
severity: warning
|
||||||
|
annotations:
|
||||||
|
summary: 主机 ({{ $labels.instance }}) 内存不足
|
||||||
|
description: "主机 {{ $labels.instance }} 内存剩余不足20%!"
|
||||||
|
- alert: 主机磁盘不足
|
||||||
|
expr: (node_filesystem_avail_bytes * 100) / node_filesystem_size_bytes < 20 and ON (instance, device, mountpoint) node_filesystem_readonly == 0
|
||||||
|
for: 2m
|
||||||
|
labels:
|
||||||
|
severity: warning
|
||||||
|
annotations:
|
||||||
|
summary: 主机 ({{ $labels.instance }}) 磁盘不足
|
||||||
|
description: "主机 {{ $labels.instance }} 磁盘剩余不足20%!"
|
11
prometheus/roles/prometheus/files/rules/prometheus.yml
Normal file
11
prometheus/roles/prometheus/files/rules/prometheus.yml
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
groups:
|
||||||
|
- name: Prometheus
|
||||||
|
rules:
|
||||||
|
- alert: Prometheus 连接失败
|
||||||
|
expr: up{type="prometheus"} == 0
|
||||||
|
for: 30s
|
||||||
|
labels:
|
||||||
|
severity: emergency
|
||||||
|
annotations:
|
||||||
|
summary: Prometheus ({{ $labels.instance }}) 连接失败
|
||||||
|
description: "Prometheus {{ $labels.instance }} 连接失败!"
|
11
prometheus/roles/prometheus/files/rules/rabbitmq.yml
Normal file
11
prometheus/roles/prometheus/files/rules/rabbitmq.yml
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
groups:
|
||||||
|
- name: RabbitMQ
|
||||||
|
rules:
|
||||||
|
- alert: RabbitMQ 连接失败
|
||||||
|
expr: up{type="rabbitmq"} == 0
|
||||||
|
for: 30s
|
||||||
|
labels:
|
||||||
|
severity: emergency
|
||||||
|
annotations:
|
||||||
|
summary: RabbitMQ ({{ $labels.instance }}) 连接失败
|
||||||
|
description: "RabbitMQ {{ $labels.instance }} 连接失败!"
|
11
prometheus/roles/prometheus/files/rules/redis.yml
Normal file
11
prometheus/roles/prometheus/files/rules/redis.yml
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
groups:
|
||||||
|
- name: Redis
|
||||||
|
rules:
|
||||||
|
- alert: Redis 连接失败
|
||||||
|
expr: up{type="redis"} == 0
|
||||||
|
for: 30s
|
||||||
|
labels:
|
||||||
|
severity: emergency
|
||||||
|
annotations:
|
||||||
|
summary: Redis ({{ $labels.instance }}) 连接失败
|
||||||
|
description: "Redis {{ $labels.instance }} 连接失败!"
|
11
prometheus/roles/prometheus/files/rules/rocketmq.yml
Normal file
11
prometheus/roles/prometheus/files/rules/rocketmq.yml
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
groups:
|
||||||
|
- name: RocketMQ
|
||||||
|
rules:
|
||||||
|
- alert: RocketMQ 连接失败
|
||||||
|
expr: up{type="rocketmq"} == 0
|
||||||
|
for: 30s
|
||||||
|
labels:
|
||||||
|
severity: emergency
|
||||||
|
annotations:
|
||||||
|
summary: RocketMQ ({{ $labels.instance }}) 连接失败
|
||||||
|
description: "RocketMQ {{ $labels.instance }} 连接失败!"
|
11
prometheus/roles/prometheus/files/rules/zookeeper.yml
Normal file
11
prometheus/roles/prometheus/files/rules/zookeeper.yml
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
groups:
|
||||||
|
- name: Zookeeper
|
||||||
|
rules:
|
||||||
|
- alert: Zookeeper 连接失败
|
||||||
|
expr: up{type="zookeeper"} == 0
|
||||||
|
for: 30s
|
||||||
|
labels:
|
||||||
|
severity: emergency
|
||||||
|
annotations:
|
||||||
|
summary: Zookeeper ({{ $labels.instance }}) 连接失败
|
||||||
|
description: "Zookeeper {{ $labels.instance }} 连接失败!"
|
73
prometheus/roles/prometheus/tasks/main.yml
Normal file
73
prometheus/roles/prometheus/tasks/main.yml
Normal file
@ -0,0 +1,73 @@
|
|||||||
|
---
|
||||||
|
# 校验 Prometheus Server 是否安装
|
||||||
|
- name: '<{{ cmd | upper }}> | 校验 Prometheus Server 是否安装'
|
||||||
|
stat:
|
||||||
|
path: '{{ flag }}'
|
||||||
|
register: ret
|
||||||
|
|
||||||
|
# 创建 Prometheus Server 安装目录
|
||||||
|
- block:
|
||||||
|
- name: '<{{ cmd | upper }}> | 创建 Prometheus Server 相关目录'
|
||||||
|
file:
|
||||||
|
path: '{{ item.value }}'
|
||||||
|
state: directory
|
||||||
|
loop: '{{ prometheus.dir | dict2items }}'
|
||||||
|
|
||||||
|
- name: '<{{ cmd | upper }}> | 安装 Prometheus Server'
|
||||||
|
template:
|
||||||
|
src: '{{ item.src }}'
|
||||||
|
dest: '{{ item.dest }}'
|
||||||
|
loop:
|
||||||
|
- src: docker-compose.yml.j2
|
||||||
|
dest: '{{ prometheus.dir.main }}/docker-compose.yml'
|
||||||
|
- src: conf/prometheus.yml.j2
|
||||||
|
dest: '{{ prometheus.dir.conf }}/prometheus.yml'
|
||||||
|
- src: reload.sh.j2
|
||||||
|
dest: '{{ prometheus.dir.main }}/reload.sh'
|
||||||
|
|
||||||
|
- name: '<{{ cmd | upper }}> | 初始化 Prometheus Server 告警规则文件'
|
||||||
|
copy:
|
||||||
|
src: '{{ item }}'
|
||||||
|
dest: '{{ prometheus.dir.rules }}'
|
||||||
|
with_fileglob: 'files/rules/*.yml'
|
||||||
|
|
||||||
|
- name: '<{{ cmd | upper }}> | 启动 Prometheus Server 容器'
|
||||||
|
shell: |
|
||||||
|
. /etc/profile
|
||||||
|
chown -R 65534.65534 {{ prometheus.dir.data }} {{ prometheus.dir.conf }} {{ prometheus.dir.rules }}
|
||||||
|
chmod +x {{ prometheus.dir.main }}/reload.sh
|
||||||
|
cd {{ prometheus.dir.main }}
|
||||||
|
docker-compose down
|
||||||
|
rm -rf data/*
|
||||||
|
docker-compose up -d
|
||||||
|
|
||||||
|
- name: '<{{ cmd | upper }}> | 等待 Prometheus Server 服务启动'
|
||||||
|
wait_for:
|
||||||
|
port: '{{ prometheus.port }}'
|
||||||
|
|
||||||
|
- name: '<{{ cmd | upper }}> | 创建 Prometheus Server 安装标记'
|
||||||
|
shell: |
|
||||||
|
set -ex
|
||||||
|
mkdir -p ~/.flag
|
||||||
|
touch {{ flag }}
|
||||||
|
|
||||||
|
when:
|
||||||
|
- cmd == "install"
|
||||||
|
- not ret.stat.exists
|
||||||
|
|
||||||
|
# 卸载 Prometheus Server
|
||||||
|
- block:
|
||||||
|
- name: '<{{ cmd | upper }}> | 卸载 Prometheus Server'
|
||||||
|
shell: |
|
||||||
|
. /etc/profile
|
||||||
|
cd {{ prometheus.dir.main }}
|
||||||
|
docker-compose down
|
||||||
|
|
||||||
|
- name: '<{{ cmd | upper }}> | 清除 Prometheus Server 相关文件'
|
||||||
|
shell: |
|
||||||
|
rm -rf {{ prometheus.dir.main }}
|
||||||
|
rm -rf {{ flag }}
|
||||||
|
|
||||||
|
when:
|
||||||
|
- cmd == "remove"
|
||||||
|
- ret.stat.exists
|
52
prometheus/roles/prometheus/templates/conf/prometheus.yml.j2
Normal file
52
prometheus/roles/prometheus/templates/conf/prometheus.yml.j2
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
# my global config
|
||||||
|
global:
|
||||||
|
scrape_interval: 5s # 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.
|
||||||
|
|
||||||
|
{% if alertmanager.enable -%}
|
||||||
|
alerting:
|
||||||
|
alertmanagers:
|
||||||
|
- static_configs:
|
||||||
|
- targets: ['{{ groups.server.0 }}:{{ alertmanager.port }}']
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
rule_files:
|
||||||
|
- "/etc/prometheus/rules/*.yml"
|
||||||
|
|
||||||
|
scrape_configs:
|
||||||
|
{% if blackbox_exporter.enable -%}
|
||||||
|
## 探针
|
||||||
|
- job_name: 'blackbox'
|
||||||
|
metrics_path: /probe
|
||||||
|
scrape_interval: 30s
|
||||||
|
params:
|
||||||
|
module: [http_2xx]
|
||||||
|
static_configs:
|
||||||
|
- targets:
|
||||||
|
{% for target in blackbox_exporter.targets -%}
|
||||||
|
- {{ target }}
|
||||||
|
{% endfor %}
|
||||||
|
relabel_configs:
|
||||||
|
- source_labels: [__address__]
|
||||||
|
target_label: __param_target
|
||||||
|
- source_labels: [__param_target]
|
||||||
|
target_label: instance
|
||||||
|
- target_label: __address__
|
||||||
|
replacement: {{ groups.blackbox.0 }}:{{ blackbox_exporter.port }}
|
||||||
|
|
||||||
|
{% endif %}
|
||||||
|
## 运维环境
|
||||||
|
### 采集 prometheus 数据
|
||||||
|
- job_name: 'ops-prometheus'
|
||||||
|
static_configs:
|
||||||
|
### 采集目标1
|
||||||
|
- targets: ['{{ groups.server.0 }}:{{ prometheus.port }}']
|
||||||
|
labels:
|
||||||
|
### 环境(test:测试环境,prod:正式环境,ops:运维环境)
|
||||||
|
env: ops
|
||||||
|
### 应用(prometheus:Prometheus)
|
||||||
|
app: prometheus
|
||||||
|
### 资源类型(prometheus:Prometheus,node:节点(机器),docker:Docker,mysql:MySQL)
|
||||||
|
type: prometheus
|
||||||
|
### 名称(采用 app-ip-type 结构)
|
||||||
|
# name: prometheus-0-1-prometheus
|
23
prometheus/roles/prometheus/templates/docker-compose.yml.j2
Normal file
23
prometheus/roles/prometheus/templates/docker-compose.yml.j2
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
version: "3.9"
|
||||||
|
|
||||||
|
services:
|
||||||
|
prometheus:
|
||||||
|
image: {{ prometheus.image }}
|
||||||
|
container_name: {{ docker.network.name }}-prometheus
|
||||||
|
hostname: prometheus
|
||||||
|
restart: always
|
||||||
|
volumes:
|
||||||
|
- /etc/localtime:/etc/localtime:ro
|
||||||
|
- {{ prometheus.dir.conf }}/prometheus.yml:/etc/prometheus/prometheus.yml
|
||||||
|
- {{ prometheus.dir.rules }}:/etc/prometheus/rules
|
||||||
|
- {{ prometheus.dir.data }}:/prometheus/data
|
||||||
|
networks:
|
||||||
|
- {{ docker.network.name }}
|
||||||
|
ports:
|
||||||
|
- {{ prometheus.port }}:9090
|
||||||
|
command: "--config.file=/etc/prometheus/prometheus.yml --web.enable-lifecycle"
|
||||||
|
|
||||||
|
networks:
|
||||||
|
{{ docker.network.name }}:
|
||||||
|
external: true
|
||||||
|
name: {{ docker.network.name }}
|
1
prometheus/roles/prometheus/templates/reload.sh.j2
Normal file
1
prometheus/roles/prometheus/templates/reload.sh.j2
Normal file
@ -0,0 +1 @@
|
|||||||
|
curl http://{{ inventory_hostname }}:{{ prometheus.port }}/-/reload -X POST
|
2
prometheus/roles/prometheus_alert/defaults/main.yml
Normal file
2
prometheus/roles/prometheus_alert/defaults/main.yml
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
---
|
||||||
|
flag: ~/.flag/{{ role_name }}
|
66
prometheus/roles/prometheus_alert/tasks/main.yml
Normal file
66
prometheus/roles/prometheus_alert/tasks/main.yml
Normal file
@ -0,0 +1,66 @@
|
|||||||
|
---
|
||||||
|
# 校验 PrometheusAlert 是否安装
|
||||||
|
- name: '<{{ cmd | upper }}> | 校验 PrometheusAlert 是否安装'
|
||||||
|
stat:
|
||||||
|
path: '{{ flag }}'
|
||||||
|
register: ret
|
||||||
|
|
||||||
|
# 安装 PrometheusAlert
|
||||||
|
- block:
|
||||||
|
- name: '<{{ cmd | upper }}> | 创建 PrometheusAlert 相关目录'
|
||||||
|
file:
|
||||||
|
path: '{{ item.value }}'
|
||||||
|
state: directory
|
||||||
|
loop: '{{ prometheus_alert.dir | dict2items }}'
|
||||||
|
|
||||||
|
- name: '<{{ cmd | upper }}> | 安装 PrometheusAlert'
|
||||||
|
template:
|
||||||
|
src: '{{ item.src }}'
|
||||||
|
dest: '{{ item.dest }}'
|
||||||
|
loop:
|
||||||
|
- src: docker-compose.yml.j2
|
||||||
|
dest: '{{ prometheus_alert.dir.main }}/docker-compose.yml'
|
||||||
|
- src: conf/app.conf.j2
|
||||||
|
dest: '{{ prometheus_alert.dir.conf }}/app.conf'
|
||||||
|
|
||||||
|
- name: '<{{ cmd | upper }}> | 启动 PrometheusAlert 容器'
|
||||||
|
shell: |
|
||||||
|
. /etc/profile
|
||||||
|
cd {{ prometheus_alert.dir.main }}
|
||||||
|
docker-compose down
|
||||||
|
docker-compose up -d
|
||||||
|
|
||||||
|
- name: '<{{ cmd | upper }}> | 等待 PrometheusAlert 服务启动'
|
||||||
|
wait_for:
|
||||||
|
port: '{{ prometheus_alert.port }}'
|
||||||
|
|
||||||
|
- name: '<{{ cmd | upper }}> | 创建 PrometheusAlert 安装标记'
|
||||||
|
shell: |
|
||||||
|
set -ex
|
||||||
|
mkdir -p ~/.flag
|
||||||
|
touch {{ flag }}
|
||||||
|
|
||||||
|
when:
|
||||||
|
- cmd == "install"
|
||||||
|
- not ret.stat.exists
|
||||||
|
- prometheus_alert.enable
|
||||||
|
- ansible_architecture == "x86_64"
|
||||||
|
|
||||||
|
# 卸载 PrometheusAlert
|
||||||
|
- block:
|
||||||
|
- name: '<{{ cmd | upper }}> | 卸载 PrometheusAlert'
|
||||||
|
shell: |
|
||||||
|
. /etc/profile
|
||||||
|
cd {{ prometheus_alert.dir.main }}
|
||||||
|
docker-compose down
|
||||||
|
|
||||||
|
- name: '<{{ cmd | upper }}> | 清除 PrometheusAlert 相关目录'
|
||||||
|
shell: |
|
||||||
|
rm -rf {{ prometheus_alert.dir.main }}
|
||||||
|
rm -rf {{ flag }}
|
||||||
|
|
||||||
|
when:
|
||||||
|
- cmd == "remove"
|
||||||
|
- ret.stat.exists
|
||||||
|
- prometheus_alert.enable
|
||||||
|
- ansible_architecture == "x86_64"
|
268
prometheus/roles/prometheus_alert/templates/conf/app.conf.j2
Normal file
268
prometheus/roles/prometheus_alert/templates/conf/app.conf.j2
Normal file
@ -0,0 +1,268 @@
|
|||||||
|
#---------------------↓全局配置-----------------------
|
||||||
|
appname = PrometheusAlert
|
||||||
|
#登录用户名
|
||||||
|
login_user={{ prometheus_alert.user }}
|
||||||
|
#登录密码
|
||||||
|
login_password={{ prometheus_alert.password }}
|
||||||
|
#监听地址
|
||||||
|
httpaddr = "0.0.0.0"
|
||||||
|
#监听端口
|
||||||
|
httpport = 8080
|
||||||
|
runmode = dev
|
||||||
|
#设置代理 proxy = http://123.123.123.123:8080
|
||||||
|
proxy =
|
||||||
|
#开启JSON请求
|
||||||
|
copyrequestbody = true
|
||||||
|
#告警消息标题
|
||||||
|
title={{ prometheus_alert.title }}
|
||||||
|
#链接到告警平台地址
|
||||||
|
GraylogAlerturl={{ prometheus_alert.url }}
|
||||||
|
#钉钉告警 告警logo图标地址
|
||||||
|
logourl=https://raw.githubusercontent.com/feiyu563/PrometheusAlert/master/doc/alert-center.png
|
||||||
|
#钉钉告警 恢复logo图标地址
|
||||||
|
rlogourl=https://raw.githubusercontent.com/feiyu563/PrometheusAlert/master/doc/alert-center.png
|
||||||
|
#短信告警级别(等于3就进行短信告警) 告警级别定义 0 信息,1 警告,2 一般严重,3 严重,4 灾难
|
||||||
|
messagelevel=3
|
||||||
|
#电话告警级别(等于4就进行语音告警) 告警级别定义 0 信息,1 警告,2 一般严重,3 严重,4 灾难
|
||||||
|
phonecalllevel=4
|
||||||
|
#默认拨打号码(页面测试短信和电话功能需要配置此项)
|
||||||
|
defaultphone={{ alert.message.phone }}
|
||||||
|
#故障恢复是否启用电话通知0为关闭,1为开启
|
||||||
|
phonecallresolved=0
|
||||||
|
#是否前台输出file or console
|
||||||
|
logtype=file
|
||||||
|
#日志文件路径
|
||||||
|
logpath=logs/prometheusalertcenter.log
|
||||||
|
#转换Prometheus,graylog告警消息的时区为CST时区(如默认已经是CST时区,请勿开启)
|
||||||
|
prometheus_cst_time=0
|
||||||
|
#数据库驱动,支持sqlite3,mysql,postgres如使用mysql或postgres,请开启db_host,db_port,db_user,db_password,db_name的注释
|
||||||
|
db_driver=sqlite3
|
||||||
|
#db_host=127.0.0.1
|
||||||
|
#db_port=3306
|
||||||
|
#db_user=root
|
||||||
|
#db_password=root
|
||||||
|
#db_name=prometheusalert
|
||||||
|
#是否开启告警记录 0为关闭,1为开启
|
||||||
|
AlertRecord=1
|
||||||
|
#是否开启告警记录定时删除 0为关闭,1为开启
|
||||||
|
RecordLive=1
|
||||||
|
#告警记录定时删除周期,单位天
|
||||||
|
RecordLiveDay=365
|
||||||
|
# 是否将告警记录写入es7,0为关闭,1为开启
|
||||||
|
alert_to_es=0
|
||||||
|
# es地址,是[]string
|
||||||
|
# beego.Appconfig.Strings读取配置为[]string,使用";"而不是","
|
||||||
|
to_es_url=http://localhost:9200
|
||||||
|
# to_es_url=http://es1:9200;http://es2:9200;http://es3:9200
|
||||||
|
# es用户和密码
|
||||||
|
# to_es_user=username
|
||||||
|
# to_es_pwd=password
|
||||||
|
|
||||||
|
#---------------------↓webhook-----------------------
|
||||||
|
#是否开启钉钉告警通道,可同时开始多个通道0为关闭,1为开启
|
||||||
|
open-dingding=1
|
||||||
|
#默认钉钉机器人地址
|
||||||
|
ddurl=https://oapi.dingtalk.com/robot/send?access_token={{ alert.dingtalk.access_token }}
|
||||||
|
#是否开启 @所有人(0为关闭,1为开启)
|
||||||
|
dd_isatall=0
|
||||||
|
|
||||||
|
#是否开启微信告警通道,可同时开始多个通道0为关闭,1为开启
|
||||||
|
open-weixin=0
|
||||||
|
#默认企业微信机器人地址
|
||||||
|
wxurl=https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=xxxxx
|
||||||
|
|
||||||
|
#是否开启飞书告警通道,可同时开始多个通道0为关闭,1为开启
|
||||||
|
open-feishu=0
|
||||||
|
#默认飞书机器人地址
|
||||||
|
fsurl=https://open.feishu.cn/open-apis/bot/hook/xxxxxxxxx
|
||||||
|
|
||||||
|
#---------------------↓腾讯云接口-----------------------
|
||||||
|
#是否开启腾讯云短信告警通道,可同时开始多个通道0为关闭,1为开启
|
||||||
|
open-txdx=0
|
||||||
|
#腾讯云短信接口key
|
||||||
|
TXY_DX_appkey=xxxxx
|
||||||
|
#腾讯云短信模版ID 腾讯云短信模版配置可参考 prometheus告警:{1}
|
||||||
|
TXY_DX_tpl_id=xxxxx
|
||||||
|
#腾讯云短信sdk app id
|
||||||
|
TXY_DX_sdkappid=xxxxx
|
||||||
|
#腾讯云短信签名 根据自己审核通过的签名来填写
|
||||||
|
TXY_DX_sign=xxxxx
|
||||||
|
|
||||||
|
#是否开启腾讯云电话告警通道,可同时开始多个通道0为关闭,1为开启
|
||||||
|
open-txdh=0
|
||||||
|
#腾讯云电话接口key
|
||||||
|
TXY_DH_phonecallappkey=xxxxx
|
||||||
|
#腾讯云电话模版ID
|
||||||
|
TXY_DH_phonecalltpl_id=xxxxx
|
||||||
|
#腾讯云电话sdk app id
|
||||||
|
TXY_DH_phonecallsdkappid=xxxxx
|
||||||
|
|
||||||
|
#---------------------↓华为云接口-----------------------
|
||||||
|
#是否开启华为云短信告警通道,可同时开始多个通道0为关闭,1为开启
|
||||||
|
open-hwdx=0
|
||||||
|
#华为云短信接口key
|
||||||
|
HWY_DX_APP_Key=xxxxxxxxxxxxxxxxxxxxxx
|
||||||
|
#华为云短信接口Secret
|
||||||
|
HWY_DX_APP_Secret=xxxxxxxxxxxxxxxxxxxxxx
|
||||||
|
#华为云APP接入<E68EA5><E585A5>址(端口接口地址)
|
||||||
|
HWY_DX_APP_Url=https://rtcsms.cn-north-1.myhuaweicloud.com:10743
|
||||||
|
#华为云短信模板ID
|
||||||
|
HWY_DX_Templateid=xxxxxxxxxxxxxxxxxxxxxx
|
||||||
|
#华为云签名名称,必须是已审核通过的,与模板类型一致的签名名称,按照自己的实际签名填写
|
||||||
|
HWY_DX_Signature=华为云
|
||||||
|
#华为云签名通道号
|
||||||
|
HWY_DX_Sender=xxxxxxxxxx
|
||||||
|
|
||||||
|
#---------------------↓阿里云接口-----------------------
|
||||||
|
#是否开启阿里云短信告警通道,可同时开始多个通道0为关闭,1为开启
|
||||||
|
open-alydx=0
|
||||||
|
#阿里云短信主账号AccessKey的ID
|
||||||
|
ALY_DX_AccessKeyId=xxxxxxxxxxxxxxxxxxxxxx
|
||||||
|
#阿里云短信接口密钥
|
||||||
|
ALY_DX_AccessSecret=xxxxxxxxxxxxxxxxxxxxxx
|
||||||
|
#阿里云短信签名名称
|
||||||
|
ALY_DX_SignName=阿里云
|
||||||
|
#阿里云短信模板ID
|
||||||
|
ALY_DX_Template=xxxxxxxxxxxxxxxxxxxxxx
|
||||||
|
|
||||||
|
#是否开启阿里云电话告警通道,可同时开始多个通道0为关闭,1为开启
|
||||||
|
open-alydh=0
|
||||||
|
#阿里云电话主账号AccessKey的ID
|
||||||
|
ALY_DH_AccessKeyId=xxxxxxxxxxxxxxxxxxxxxx
|
||||||
|
#阿里云电话接口密钥
|
||||||
|
ALY_DH_AccessSecret=xxxxxxxxxxxxxxxxxxxxxx
|
||||||
|
#阿里云电话被叫显号,必须是已购买的号码
|
||||||
|
ALY_DX_CalledShowNumber=xxxxxxxxx
|
||||||
|
#阿里云电话文本转语音(TTS)模板ID
|
||||||
|
ALY_DH_TtsCode=xxxxxxxx
|
||||||
|
|
||||||
|
#---------------------↓容联云接口-----------------------
|
||||||
|
#是否开启容联云电话告警通道,可同时开始多个通道0为关闭,1为开启
|
||||||
|
open-rlydh=0
|
||||||
|
#容联云基础接口地址
|
||||||
|
RLY_URL=https://app.cloopen.com:8883/2013-12-26/Accounts/
|
||||||
|
#容联云后台SID
|
||||||
|
RLY_ACCOUNT_SID=xxxxxxxxxxx
|
||||||
|
#容联云api-token
|
||||||
|
RLY_ACCOUNT_TOKEN=xxxxxxxxxx
|
||||||
|
#容联云app_id
|
||||||
|
RLY_APP_ID=xxxxxxxxxxxxx
|
||||||
|
|
||||||
|
#---------------------↓邮件配置-----------------------
|
||||||
|
#是否开启邮件
|
||||||
|
open-email=0
|
||||||
|
#邮件发件服务器地址
|
||||||
|
Email_host=smtp.qq.com
|
||||||
|
#邮件发件服务器端口
|
||||||
|
Email_port=465
|
||||||
|
#邮件帐号
|
||||||
|
Email_user=xxxxxxx@qq.com
|
||||||
|
#邮件密码
|
||||||
|
Email_password=xxxxxx
|
||||||
|
#邮件标题
|
||||||
|
Email_title=运维告警
|
||||||
|
#默认发送邮箱
|
||||||
|
Default_emails=xxxxx@qq.com,xxxxx@qq.com
|
||||||
|
|
||||||
|
#---------------------↓七陌云接口-----------------------
|
||||||
|
#是否开启七陌短信告警通道,可同时开始多个通道0为关闭,1为开启
|
||||||
|
open-7moordx=0
|
||||||
|
#七陌账户ID
|
||||||
|
7MOOR_ACCOUNT_ID=Nxxx
|
||||||
|
#七陌账户APISecret
|
||||||
|
7MOOR_ACCOUNT_APISECRET=xxx
|
||||||
|
#七陌账户短信模板编号
|
||||||
|
7MOOR_DX_TEMPLATENUM=n
|
||||||
|
#注意:七陌短信变量这里只用一个var1,在代码里写死了。
|
||||||
|
#-----------
|
||||||
|
#是否开启七陌webcall语音通知告警通道,可同时开始多个通道0为关闭,1为开启
|
||||||
|
open-7moordh=0
|
||||||
|
#请在七陌平台添加虚拟服务号、文本节点
|
||||||
|
#七陌账户webcall的虚拟服务号
|
||||||
|
7MOOR_WEBCALL_SERVICENO=xxx
|
||||||
|
# 文本节点里被替换的变量,我配置的是text。如果被替换的变量不是text,请修改此配置
|
||||||
|
7MOOR_WEBCALL_VOICE_VAR=text
|
||||||
|
|
||||||
|
#---------------------↓telegram接口-----------------------
|
||||||
|
#是否开启telegram告警通道,可同时开始多个通道0为关闭,1为开启
|
||||||
|
open-tg=0
|
||||||
|
#tg机器人token
|
||||||
|
TG_TOKEN=xxxxx
|
||||||
|
#tg消息模式 个人消息或者频道消息 0为关闭(推送给个人),1为开启(推送给频道)
|
||||||
|
TG_MODE_CHAN=0
|
||||||
|
#tg用户ID
|
||||||
|
TG_USERID=xxxxx
|
||||||
|
#tg频道name或者id, 频道name需要以@开始
|
||||||
|
TG_CHANNAME=xxxxx
|
||||||
|
#tg api地址, 可以配置为代理地址
|
||||||
|
#TG_API_PROXY="https://api.telegram.org/bot%s/%s"
|
||||||
|
|
||||||
|
#---------------------↓workwechat接口-----------------------
|
||||||
|
#是否开启workwechat告警通道,可同时开始多个通道0为关闭,1为开启
|
||||||
|
open-workwechat=0
|
||||||
|
# 企业ID
|
||||||
|
WorkWechat_CropID=xxxxx
|
||||||
|
# 应用ID
|
||||||
|
WorkWechat_AgentID=xxxx
|
||||||
|
# 应用secret
|
||||||
|
WorkWechat_AgentSecret=xxxx
|
||||||
|
# 接受用户
|
||||||
|
WorkWechat_ToUser="zhangsan|lisi"
|
||||||
|
# 接受部门
|
||||||
|
WorkWechat_ToParty="ops|dev"
|
||||||
|
# 接受标签
|
||||||
|
WorkWechat_ToTag=""
|
||||||
|
# 消息类型, 暂时只支持markdown
|
||||||
|
# WorkWechat_Msgtype = "markdown"
|
||||||
|
|
||||||
|
#---------------------↓百度云接口-----------------------
|
||||||
|
#是否开启百度云短信告警通道,可同时开始多个通道0为关闭,1为开启
|
||||||
|
open-baidudx=0
|
||||||
|
#百度云短信接口AK(ACCESS_KEY_ID)
|
||||||
|
BDY_DX_AK=xxxxx
|
||||||
|
#百度云短信接口SK(SECRET_ACCESS_KEY)
|
||||||
|
BDY_DX_SK=xxxxx
|
||||||
|
#百度云短信ENDPOINT(ENDPOINT参数需要用指定区域的域名来进行定义,如服务所在区域为北京,则为)
|
||||||
|
BDY_DX_ENDPOINT=http://smsv3.bj.baidubce.com
|
||||||
|
#百度云短信模版ID,根据自己审核通过的模版来填写(模版支持一个参数code:如prometheus告警:{code})
|
||||||
|
BDY_DX_TEMPLATE_ID=xxxxx
|
||||||
|
#百度云短信签名ID,根据自己审核通过的签名来填写
|
||||||
|
TXY_DX_SIGNATURE_ID=xxxxx
|
||||||
|
|
||||||
|
#---------------------↓百度Hi(如流)-----------------------
|
||||||
|
#是否开启百度Hi(如流)告警通道,可同时开始多个通道0为关闭,1为开启
|
||||||
|
open-ruliu=0
|
||||||
|
#默认百度Hi(如流)机器人地址
|
||||||
|
BDRL_URL=https://api.im.baidu.com/api/msg/groupmsgsend?access_token=xxxxxxxxxxxxxx
|
||||||
|
#百度Hi(如流)群ID
|
||||||
|
BDRL_ID=123456
|
||||||
|
#---------------------↓bark接口-----------------------
|
||||||
|
#是否开启telegram告警通道,可同时开始多个通道0为关闭,1为开启
|
||||||
|
open-bark=0
|
||||||
|
#bark默认地址, 建议自行部署bark-server
|
||||||
|
BARK_URL=https://api.day.app
|
||||||
|
#bark key, 多个key使用分割
|
||||||
|
BARK_KEYS=xxxxx
|
||||||
|
# 复制, 推荐开启
|
||||||
|
BARK_COPY=1
|
||||||
|
# 历史记录保存,推荐开启
|
||||||
|
BARK_ARCHIVE=1
|
||||||
|
# 消息分组
|
||||||
|
BARK_GROUP=PrometheusAlert
|
||||||
|
|
||||||
|
#---------------------↓语音播报-----------------------
|
||||||
|
#语音播报需要配合语音播报插件才能使用
|
||||||
|
#是否开启语音播报通道,0为关闭,1为开启
|
||||||
|
open-voice=1
|
||||||
|
VOICE_IP=127.0.0.1
|
||||||
|
VOICE_PORT=9999
|
||||||
|
|
||||||
|
#---------------------↓飞书机器人应用-----------------------
|
||||||
|
#是否开启feishuapp告警通道,可同时开始多个通道0为关闭,1为开启
|
||||||
|
open-feishuapp=1
|
||||||
|
# APPID
|
||||||
|
FEISHU_APPID=cli_xxxxxxxxxxxxx
|
||||||
|
# APPSECRET
|
||||||
|
FEISHU_APPSECRET=xxxxxxxxxxxxxxxxxxxxxx
|
||||||
|
# 可填飞书 用户open_id、user_id、union_ids、部门open_department_id
|
||||||
|
AT_USER_ID="xxxxxxxx"
|
@ -0,0 +1,22 @@
|
|||||||
|
version: "3.9"
|
||||||
|
|
||||||
|
services:
|
||||||
|
prometheus-alert:
|
||||||
|
image: {{ prometheus_alert.image }}
|
||||||
|
container_name: {{ docker.network.name }}-prometheus-alert
|
||||||
|
hostname: prometheus-alert
|
||||||
|
restart: always
|
||||||
|
volumes:
|
||||||
|
- /etc/localtime:/etc/localtime:ro
|
||||||
|
- {{ prometheus_alert.dir.conf }}:/app/conf
|
||||||
|
- {{ prometheus_alert.dir.db }}:/app/db
|
||||||
|
- {{ prometheus_alert.dir.logs }}:/app/logs
|
||||||
|
networks:
|
||||||
|
- {{ docker.network.name }}
|
||||||
|
ports:
|
||||||
|
- {{ prometheus_alert.port }}:8080
|
||||||
|
|
||||||
|
networks:
|
||||||
|
{{ docker.network.name }}:
|
||||||
|
external: true
|
||||||
|
name: {{ docker.network.name }}
|
@ -0,0 +1,2 @@
|
|||||||
|
---
|
||||||
|
flag: ~/.flag/{{ role_name }}
|
@ -0,0 +1,40 @@
|
|||||||
|
{{ define "email.to.message" }}
|
||||||
|
|
||||||
|
{{- if gt (len .Alerts.Firing) 0 -}}
|
||||||
|
{{- range $index, $alert := .Alerts -}}
|
||||||
|
|
||||||
|
========= **监控告警** =========
|
||||||
|
|
||||||
|
**告警程序:** Alertmanager
|
||||||
|
**告警类型:** {{ $alert.Labels.alertname }}
|
||||||
|
**告警级别:** {{ $alert.Labels.severity }} 级
|
||||||
|
**告警状态:** {{ .Status }}
|
||||||
|
**故障主机:** {{ $alert.Labels.instance }} {{ $alert.Labels.device }}
|
||||||
|
**告警主题:** {{ .Annotations.summary }}
|
||||||
|
**告警详情:** {{ $alert.Annotations.message }}{{ $alert.Annotations.description}}
|
||||||
|
**主机标签:** {{ range .Labels.SortedPairs }} </br> [ {{ .Name }}: {{ .Value | markdown | html }} ]
|
||||||
|
{{- end }} </br>
|
||||||
|
|
||||||
|
**故障时间:** {{ ($alert.StartsAt.Add 28800e9).Format "2006-01-02 15:04:05" }}
|
||||||
|
========= = end = =========
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{- if gt (len .Alerts.Resolved) 0 -}}
|
||||||
|
{{- range $index, $alert := .Alerts -}}
|
||||||
|
|
||||||
|
========= 告警恢复 =========
|
||||||
|
**告警程序:** Alertmanager
|
||||||
|
**告警类型:** {{ .Labels.alertname }}
|
||||||
|
**告警级别:** {{ $alert.Labels.severity }} 级
|
||||||
|
**告警状态:** {{ .Status }}
|
||||||
|
**告警主机:** {{ .Labels.instance }}
|
||||||
|
**告警主题:** {{ $alert.Annotations.summary }}
|
||||||
|
**告警详情:** {{ $alert.Annotations.message }}{{ $alert.Annotations.description}}
|
||||||
|
**故障时间:** {{ ($alert.StartsAt.Add 28800e9).Format "2006-01-02 15:04:05" }}
|
||||||
|
**恢复时间:** {{ ($alert.EndsAt.Add 28800e9).Format "2006-01-02 15:04:05" }}
|
||||||
|
|
||||||
|
========= = **end** = =========
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
70
prometheus/roles/prometheus_webhook_dingtalk/tasks/main.yml
Normal file
70
prometheus/roles/prometheus_webhook_dingtalk/tasks/main.yml
Normal file
@ -0,0 +1,70 @@
|
|||||||
|
---
|
||||||
|
# 校验 PrometheusWebhookDingtalk 是否安装
|
||||||
|
- name: '<{{ cmd | upper }}> | 校验 PrometheusWebhookDingtalk 是否安装'
|
||||||
|
stat:
|
||||||
|
path: '{{ flag }}'
|
||||||
|
register: ret
|
||||||
|
|
||||||
|
# 安装 PrometheusWebhookDingtalk
|
||||||
|
- block:
|
||||||
|
- name: '<{{ cmd | upper }}> | 创建 PrometheusWebhookDingtalk 相关目录'
|
||||||
|
file:
|
||||||
|
path: '{{ item.value }}'
|
||||||
|
state: directory
|
||||||
|
loop: '{{ prometheus_webhook_dingtalk.dir | dict2items }}'
|
||||||
|
|
||||||
|
- name: '<{{ cmd | upper }}> | 安装 PrometheusWebhookDingtalk'
|
||||||
|
template:
|
||||||
|
src: '{{ item.src }}'
|
||||||
|
dest: '{{ item.dest }}'
|
||||||
|
loop:
|
||||||
|
- src: docker-compose.yml.j2
|
||||||
|
dest: '{{ prometheus_webhook_dingtalk.dir.main }}/docker-compose.yml'
|
||||||
|
- src: conf/config.yml.j2
|
||||||
|
dest: '{{ prometheus_webhook_dingtalk.dir.conf }}/config.yml'
|
||||||
|
|
||||||
|
- name: '<{{ cmd | upper }}> | 初始化 PrometheusWebhookDingtalk 告警模板文件'
|
||||||
|
copy:
|
||||||
|
src: '{{ item }}'
|
||||||
|
dest: '{{ prometheus_webhook_dingtalk.dir.template }}'
|
||||||
|
with_fileglob: 'files/template/*'
|
||||||
|
|
||||||
|
- name: '<{{ cmd | upper }}> | 启动 PrometheusWebhookDingtalk 容器'
|
||||||
|
shell: |
|
||||||
|
. /etc/profile
|
||||||
|
cd {{ prometheus_webhook_dingtalk.dir.main }}
|
||||||
|
docker-compose down
|
||||||
|
docker-compose up -d
|
||||||
|
|
||||||
|
- name: '<{{ cmd | upper }}> | 等待 PrometheusWebhookDingtalk 服务启动'
|
||||||
|
wait_for:
|
||||||
|
port: '{{ prometheus_webhook_dingtalk.port }}'
|
||||||
|
|
||||||
|
- name: '<{{ cmd | upper }}> | 创建 PrometheusWebhookDingtalk 安装标记'
|
||||||
|
shell: |
|
||||||
|
set -ex
|
||||||
|
mkdir -p ~/.flag
|
||||||
|
touch {{ flag }}
|
||||||
|
|
||||||
|
when:
|
||||||
|
- cmd == "install"
|
||||||
|
- not ret.stat.exists
|
||||||
|
- prometheus_webhook_dingtalk.enable
|
||||||
|
|
||||||
|
# 卸载 PrometheusWebhookDingtalk
|
||||||
|
- block:
|
||||||
|
- name: '<{{ cmd | upper }}> | 卸载 PrometheusWebhookDingtalk'
|
||||||
|
shell: |
|
||||||
|
. /etc/profile
|
||||||
|
cd {{ prometheus_webhook_dingtalk.dir.main }}
|
||||||
|
docker-compose down
|
||||||
|
|
||||||
|
- name: '<{{ cmd | upper }}> | 清除 PrometheusWebhookDingtalk 相关文件'
|
||||||
|
shell: |
|
||||||
|
rm -rf {{ prometheus_webhook_dingtalk.dir.main }}
|
||||||
|
rm -rf {{ flag }}
|
||||||
|
|
||||||
|
when:
|
||||||
|
- cmd == "remove"
|
||||||
|
- ret.stat.exists
|
||||||
|
- prometheus_webhook_dingtalk.enable
|
@ -0,0 +1,35 @@
|
|||||||
|
## Request timeout
|
||||||
|
# timeout: 5s
|
||||||
|
|
||||||
|
## Uncomment following line in order to write template from scratch (be careful!)
|
||||||
|
#no_builtin_template: true
|
||||||
|
|
||||||
|
## Customizable templates path
|
||||||
|
#templates:
|
||||||
|
# - contrib/templates/legacy/template.tmpl
|
||||||
|
templates:
|
||||||
|
- /etc/prometheus-webhook-dingtalk/templates/legacy/template.tmpl
|
||||||
|
|
||||||
|
## Targets, previously was known as "profiles"
|
||||||
|
targets:
|
||||||
|
webhook1:
|
||||||
|
url: https://oapi.dingtalk.com/robot/send?access_token=xxxxxxxxxxxx
|
||||||
|
# secret for signature
|
||||||
|
secret: SEC000000000000000000000
|
||||||
|
webhook2:
|
||||||
|
url: https://oapi.dingtalk.com/robot/send?access_token={{ alert.dingtalk.access_token }}
|
||||||
|
webhook_legacy:
|
||||||
|
url: https://oapi.dingtalk.com/robot/send?access_token={{ alert.dingtalk.access_token }}
|
||||||
|
# Customize template content
|
||||||
|
message:
|
||||||
|
# Use legacy template
|
||||||
|
title: '{{ alert.message.title }}'
|
||||||
|
text: '{{ alert.message.text }}'
|
||||||
|
webhook_mention_all:
|
||||||
|
url: https://oapi.dingtalk.com/robot/send?access_token=xxxxxxxxxxxx
|
||||||
|
mention:
|
||||||
|
all: true
|
||||||
|
webhook_mention_users:
|
||||||
|
url: https://oapi.dingtalk.com/robot/send?access_token=xxxxxxxxxxxx
|
||||||
|
mention:
|
||||||
|
mobiles: ['156xxxx8827', '189xxxx8325']
|
@ -0,0 +1,23 @@
|
|||||||
|
version: "3.9"
|
||||||
|
|
||||||
|
services:
|
||||||
|
prometheus-webhook-dingtalk:
|
||||||
|
image: {{ prometheus_webhook_dingtalk.image }}
|
||||||
|
container_name: {{ docker.network.name }}-prometheus-webhook-dingtalk
|
||||||
|
hostname: prometheus-webhook-dingtalk
|
||||||
|
restart: always
|
||||||
|
volumes:
|
||||||
|
- /etc/localtime:/etc/localtime:ro
|
||||||
|
- {{ prometheus_webhook_dingtalk.dir.conf }}/config.yml:/etc/prometheus-webhook-dingtalk/config.yml
|
||||||
|
- {{ prometheus_webhook_dingtalk.dir.template }}/template.tmpl:/etc/prometheus-webhook-dingtalk/templates/legacy/template.tmpl
|
||||||
|
networks:
|
||||||
|
- {{ docker.network.name }}
|
||||||
|
ports:
|
||||||
|
- {{ prometheus_webhook_dingtalk.port }}:8060
|
||||||
|
environment:
|
||||||
|
- config.file=/etc/prometheus-webhook-dingtalk/config.yml
|
||||||
|
|
||||||
|
networks:
|
||||||
|
{{ docker.network.name }}:
|
||||||
|
external: true
|
||||||
|
name: {{ docker.network.name }}
|
2
prometheus/roles/promtail/defaults/main.yml
Normal file
2
prometheus/roles/promtail/defaults/main.yml
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
---
|
||||||
|
flag: ~/.flag/{{ role_name }}
|
62
prometheus/roles/promtail/tasks/main.yml
Normal file
62
prometheus/roles/promtail/tasks/main.yml
Normal file
@ -0,0 +1,62 @@
|
|||||||
|
---
|
||||||
|
# 校验 Promtail 是否安装
|
||||||
|
- name: '<{{ cmd | upper }}> | 校验 Promtail 是否安装'
|
||||||
|
stat:
|
||||||
|
path: '{{ flag }}'
|
||||||
|
register: ret
|
||||||
|
|
||||||
|
# 安装 Promtail
|
||||||
|
- block:
|
||||||
|
- name: '<{{ cmd | upper }}> | 创建 Promtail 相关目录'
|
||||||
|
file:
|
||||||
|
path: '{{ item.value }}'
|
||||||
|
state: directory
|
||||||
|
loop: '{{ promtail.dir | dict2items }}'
|
||||||
|
|
||||||
|
- name: '<{{ cmd | upper }}> | 安装 Promtail'
|
||||||
|
template:
|
||||||
|
src: '{{ item.src }}'
|
||||||
|
dest: '{{ item.dest }}'
|
||||||
|
loop:
|
||||||
|
- src: docker-compose.yml.j2
|
||||||
|
dest: '{{ promtail.dir.main }}/docker-compose.yml'
|
||||||
|
- src: conf/promtail-config.yaml.j2
|
||||||
|
dest: '{{ promtail.dir.conf }}/promtail-config.yaml'
|
||||||
|
|
||||||
|
- name: '<{{ cmd | upper }}> | 启动 Promtail 容器'
|
||||||
|
shell: |
|
||||||
|
. /etc/profile
|
||||||
|
cd {{ promtail.dir.main }}
|
||||||
|
docker-compose down
|
||||||
|
docker-compose up -d
|
||||||
|
|
||||||
|
# - name: '<{{ cmd | upper }}> | 等待 Promtail 服务启动'
|
||||||
|
# wait_for:
|
||||||
|
# port: '{{ promtail.port }}'
|
||||||
|
|
||||||
|
- name: '<{{ cmd | upper }}> | 创建 Promtail 安装标记'
|
||||||
|
shell: |
|
||||||
|
set -ex
|
||||||
|
mkdir -p ~/.flag
|
||||||
|
touch {{ flag }}
|
||||||
|
|
||||||
|
when:
|
||||||
|
- cmd == "install"
|
||||||
|
- not ret.stat.exists
|
||||||
|
|
||||||
|
# 卸载 Promtail
|
||||||
|
- block:
|
||||||
|
- name: '<{{ cmd | upper }}> | 卸载 Promtail'
|
||||||
|
shell: |
|
||||||
|
. /etc/profile
|
||||||
|
cd {{ promtail.dir.main }}
|
||||||
|
docker-compose down
|
||||||
|
|
||||||
|
- name: '<{{ cmd | upper }}> | 清除 Promtail 相关文件'
|
||||||
|
shell: |
|
||||||
|
rm -rf {{ promtail.dir.main }}
|
||||||
|
rm -rf {{ flag }}
|
||||||
|
|
||||||
|
when:
|
||||||
|
- cmd == "remove"
|
||||||
|
- ret.stat.exists
|
@ -0,0 +1,24 @@
|
|||||||
|
server:
|
||||||
|
http_listen_port: 9080
|
||||||
|
grpc_listen_port: 0
|
||||||
|
|
||||||
|
positions:
|
||||||
|
filename: /tmp/positions.yaml
|
||||||
|
|
||||||
|
clients:
|
||||||
|
- url: http://{{ groups.server.0 }}:{{ loki.port }}/loki/api/v1/push
|
||||||
|
|
||||||
|
scrape_configs:
|
||||||
|
{% for node in promtail.nodes -%}
|
||||||
|
{% if node.host == inventory_hostname -%}
|
||||||
|
{% for target in node.targets -%}
|
||||||
|
- job_name: {{ target.name }}
|
||||||
|
static_configs:
|
||||||
|
- targets:
|
||||||
|
- localhost
|
||||||
|
labels:
|
||||||
|
job: {{ target.name }}
|
||||||
|
__path__: {{ target.path }}/*log
|
||||||
|
{% endfor %}
|
||||||
|
{% endif %}
|
||||||
|
{% endfor %}
|
27
prometheus/roles/promtail/templates/docker-compose.yml.j2
Normal file
27
prometheus/roles/promtail/templates/docker-compose.yml.j2
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
version: "3.9"
|
||||||
|
|
||||||
|
services:
|
||||||
|
promtail:
|
||||||
|
image: {{ promtail.image }}
|
||||||
|
container_name: {{ docker.network.name }}-promtail
|
||||||
|
hostname: promtail
|
||||||
|
restart: always
|
||||||
|
networks:
|
||||||
|
- {{ docker.network.name }}
|
||||||
|
{% for node in promtail.nodes -%}
|
||||||
|
{% if node.host == inventory_hostname -%}
|
||||||
|
ports:
|
||||||
|
- {{ node.port }}:9080
|
||||||
|
volumes:
|
||||||
|
- {{ promtail.dir.conf }}/promtail-config.yaml:/etc/promtail/promtail-config.yaml
|
||||||
|
{% for target in node.targets -%}
|
||||||
|
- {{ target.path }}:{{ target.path }}
|
||||||
|
{% endfor %}
|
||||||
|
{% endif %}
|
||||||
|
{% endfor %}
|
||||||
|
command: "-config.file=/etc/promtail/promtail-config.yaml"
|
||||||
|
|
||||||
|
networks:
|
||||||
|
{{ docker.network.name }}:
|
||||||
|
external: true
|
||||||
|
name: {{ docker.network.name }}
|
2
prometheus/roles/rabbitmq_exporter/defaults/main.yml
Normal file
2
prometheus/roles/rabbitmq_exporter/defaults/main.yml
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
---
|
||||||
|
flag: ~/.flag/{{ role_name }}
|
59
prometheus/roles/rabbitmq_exporter/tasks/main.yml
Normal file
59
prometheus/roles/rabbitmq_exporter/tasks/main.yml
Normal file
@ -0,0 +1,59 @@
|
|||||||
|
---
|
||||||
|
# 校验 Rabbitmq Exporter 是否安装
|
||||||
|
- name: '<{{ cmd | upper }}> | 校验 Rabbitmq Exporter 是否安装'
|
||||||
|
stat:
|
||||||
|
path: '{{ flag }}'
|
||||||
|
register: ret
|
||||||
|
|
||||||
|
# 安装 Rabbitmq Exporter
|
||||||
|
- block:
|
||||||
|
- name: '<{{ cmd | upper }}> | 创建 Rabbitmq Exporter 相关目录'
|
||||||
|
file:
|
||||||
|
path: '{{ rabbitmq_exporter.dir }}'
|
||||||
|
state: directory
|
||||||
|
|
||||||
|
- name: '<{{ cmd | upper }}> | 安装 Rabbitmq Exporter'
|
||||||
|
template:
|
||||||
|
src: '{{ item.src }}'
|
||||||
|
dest: '{{ item.dest }}'
|
||||||
|
loop:
|
||||||
|
- src: docker-compose.yml.j2
|
||||||
|
dest: '{{ rabbitmq_exporter.dir }}/docker-compose.yml'
|
||||||
|
|
||||||
|
- name: '<{{ cmd | upper }}> | 启动 Rabbitmq Exporter 容器'
|
||||||
|
shell: |
|
||||||
|
. /etc/profile
|
||||||
|
cd {{ rabbitmq_exporter.dir }}
|
||||||
|
docker-compose down
|
||||||
|
docker-compose up -d
|
||||||
|
|
||||||
|
# - name: '<{{ cmd | upper }}> | 等待 Rabbitmq Exporter 服务启动'
|
||||||
|
# wait_for:
|
||||||
|
# port: '{{ rabbitmq_exporter.port }}'
|
||||||
|
|
||||||
|
- name: '<{{ cmd | upper }}> | 创建 Rabbitmq Exporter 安装标记'
|
||||||
|
shell: |
|
||||||
|
set -ex
|
||||||
|
mkdir -p ~/.flag
|
||||||
|
touch {{ flag }}
|
||||||
|
|
||||||
|
when:
|
||||||
|
- cmd == "install"
|
||||||
|
- not ret.stat.exists
|
||||||
|
|
||||||
|
# 卸载 Rabbitmq Exporter
|
||||||
|
- block:
|
||||||
|
- name: '<{{ cmd | upper }}> | 卸载 Rabbitmq Exporter'
|
||||||
|
shell: |
|
||||||
|
. /etc/profile
|
||||||
|
cd {{ rabbitmq_exporter.dir }}
|
||||||
|
docker-compose down
|
||||||
|
|
||||||
|
- name: '<{{ cmd | upper }}> | 清除 Rabbitmq Exporter 相关文件'
|
||||||
|
shell: |
|
||||||
|
rm -rf {{ rabbitmq_exporter.dir }}
|
||||||
|
rm -rf {{ flag }}
|
||||||
|
|
||||||
|
when:
|
||||||
|
- cmd == "remove"
|
||||||
|
- ret.stat.exists
|
@ -0,0 +1,25 @@
|
|||||||
|
version: "3.9"
|
||||||
|
|
||||||
|
services:
|
||||||
|
rabbitmq-exporter:
|
||||||
|
image: {{ rabbitmq_exporter.image }}
|
||||||
|
container_name: {{ docker.network.name }}-rabbitmq-exporter
|
||||||
|
hostname: rabbitmq-exporter
|
||||||
|
restart: always
|
||||||
|
networks:
|
||||||
|
- {{ docker.network.name }}
|
||||||
|
{% for node in rabbitmq_exporter.nodes -%}
|
||||||
|
{% if node.host == inventory_hostname -%}
|
||||||
|
ports:
|
||||||
|
- {{ node.port }}:9419
|
||||||
|
environment:
|
||||||
|
- RABBIT_URL=http://{{ node.url }}
|
||||||
|
- RABBIT_USER={{ node.user }}
|
||||||
|
- RABBIT_PASSWORD={{ node.password }}
|
||||||
|
{% endif %}
|
||||||
|
{% endfor %}
|
||||||
|
|
||||||
|
networks:
|
||||||
|
{{ docker.network.name }}:
|
||||||
|
external: true
|
||||||
|
name: {{ docker.network.name }}
|
2
prometheus/roles/redis_exporter/defaults/main.yml
Normal file
2
prometheus/roles/redis_exporter/defaults/main.yml
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
---
|
||||||
|
flag: ~/.flag/{{ role_name }}
|
59
prometheus/roles/redis_exporter/tasks/main.yml
Normal file
59
prometheus/roles/redis_exporter/tasks/main.yml
Normal file
@ -0,0 +1,59 @@
|
|||||||
|
---
|
||||||
|
# 校验 Redis Exporter 是否安装
|
||||||
|
- name: '<{{ cmd | upper }}> | 校验 Redis Exporter 是否安装'
|
||||||
|
stat:
|
||||||
|
path: '{{ flag }}'
|
||||||
|
register: ret
|
||||||
|
|
||||||
|
# 安装 Redis Exporter
|
||||||
|
- block:
|
||||||
|
- name: '<{{ cmd | upper }}> | 创建 Redis Exporter 相关目录'
|
||||||
|
file:
|
||||||
|
path: '{{ redis_exporter.dir }}'
|
||||||
|
state: directory
|
||||||
|
|
||||||
|
- name: '<{{ cmd | upper }}> | 安装 Redis Exporter'
|
||||||
|
template:
|
||||||
|
src: '{{ item.src }}'
|
||||||
|
dest: '{{ item.dest }}'
|
||||||
|
loop:
|
||||||
|
- src: docker-compose.yml.j2
|
||||||
|
dest: '{{ redis_exporter.dir }}/docker-compose.yml'
|
||||||
|
|
||||||
|
- name: '<{{ cmd | upper }}> | 启动 Redis Exporter 容器'
|
||||||
|
shell: |
|
||||||
|
. /etc/profile
|
||||||
|
cd {{ redis_exporter.dir }}
|
||||||
|
docker-compose down
|
||||||
|
docker-compose up -d
|
||||||
|
|
||||||
|
# - name: '<{{ cmd | upper }}> | 等待 Redis Exporter 服务启动'
|
||||||
|
# wait_for:
|
||||||
|
# port: '{{ redis_exporter.port }}'
|
||||||
|
|
||||||
|
- name: '<{{ cmd | upper }}> | 创建 Redis Exporter 安装标记'
|
||||||
|
shell: |
|
||||||
|
set -ex
|
||||||
|
mkdir -p ~/.flag
|
||||||
|
touch {{ flag }}
|
||||||
|
|
||||||
|
when:
|
||||||
|
- cmd == "install"
|
||||||
|
- not ret.stat.exists
|
||||||
|
|
||||||
|
# 卸载 Redis Exporter
|
||||||
|
- block:
|
||||||
|
- name: '<{{ cmd | upper }}> | 卸载 Redis Exporter'
|
||||||
|
shell: |
|
||||||
|
. /etc/profile
|
||||||
|
cd {{ redis_exporter.dir }}
|
||||||
|
docker-compose down
|
||||||
|
|
||||||
|
- name: '<{{ cmd | upper }}> | 清除 Redis Exporter 相关文件'
|
||||||
|
shell: |
|
||||||
|
rm -rf {{ redis_exporter.dir }}
|
||||||
|
rm -rf {{ flag }}
|
||||||
|
|
||||||
|
when:
|
||||||
|
- cmd == "remove"
|
||||||
|
- ret.stat.exists
|
@ -0,0 +1,24 @@
|
|||||||
|
version: "3.9"
|
||||||
|
|
||||||
|
services:
|
||||||
|
redis-exporter:
|
||||||
|
image: {{ redis_exporter.image }}
|
||||||
|
container_name: {{ docker.network.name }}-redis-exporter
|
||||||
|
hostname: redis-exporter
|
||||||
|
restart: always
|
||||||
|
networks:
|
||||||
|
- {{ docker.network.name }}
|
||||||
|
{% for node in redis_exporter.nodes -%}
|
||||||
|
{% if node.host == inventory_hostname -%}
|
||||||
|
ports:
|
||||||
|
- {{ node.port }}:9121
|
||||||
|
command:
|
||||||
|
- '-redis.addr={{ node.url }}'
|
||||||
|
- '-redis.password={{ node.password }}'
|
||||||
|
{% endif %}
|
||||||
|
{% endfor %}
|
||||||
|
|
||||||
|
networks:
|
||||||
|
{{ docker.network.name }}:
|
||||||
|
external: true
|
||||||
|
name: {{ docker.network.name }}
|
2
prometheus/roles/rocketmq_exporter/defaults/main.yml
Normal file
2
prometheus/roles/rocketmq_exporter/defaults/main.yml
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
---
|
||||||
|
flag: ~/.flag/{{ role_name }}
|
Binary file not shown.
66
prometheus/roles/rocketmq_exporter/tasks/main.yml
Normal file
66
prometheus/roles/rocketmq_exporter/tasks/main.yml
Normal file
@ -0,0 +1,66 @@
|
|||||||
|
---
|
||||||
|
# 校验 Rocketmq Exporter 是否安装
|
||||||
|
- name: '<{{ cmd | upper }}> | 校验 Rocketmq Exporter 是否安装'
|
||||||
|
stat:
|
||||||
|
path: '{{ flag }}'
|
||||||
|
register: ret
|
||||||
|
|
||||||
|
# 安装 Rocketmq Exporter
|
||||||
|
- block:
|
||||||
|
- name: '<{{ cmd | upper }}> | 创建 Rocketmq Exporter 相关目录'
|
||||||
|
file:
|
||||||
|
path: '{{ rocketmq_exporter.dir }}'
|
||||||
|
state: directory
|
||||||
|
|
||||||
|
- name: '<{{ cmd | upper }}> | 准备 Rocketmq Exporter Jar 包'
|
||||||
|
copy:
|
||||||
|
src: files/{{ rocketmq_exporter.jar }}
|
||||||
|
dest: '{{ rocketmq_exporter.dir }}/{{ rocketmq_exporter.jar }}'
|
||||||
|
|
||||||
|
- name: '<{{ cmd | upper }}> | 安装 Rocketmq Exporter'
|
||||||
|
template:
|
||||||
|
src: '{{ item.src }}'
|
||||||
|
dest: '{{ item.dest }}'
|
||||||
|
loop:
|
||||||
|
- src: docker-compose.yml.j2
|
||||||
|
dest: '{{ rocketmq_exporter.dir }}/docker-compose.yml'
|
||||||
|
|
||||||
|
- name: '<{{ cmd | upper }}> | 启动 Rocketmq Exporter 容器'
|
||||||
|
shell: |
|
||||||
|
. /etc/profile
|
||||||
|
cd {{ rocketmq_exporter.dir }}
|
||||||
|
docker-compose down
|
||||||
|
docker-compose up -d
|
||||||
|
|
||||||
|
# - name: '<{{ cmd | upper }}> | 等待 Rocketmq Exporter 服务启动'
|
||||||
|
# wait_for:
|
||||||
|
# port: '{{ rocketmq_exporter.port }}'
|
||||||
|
|
||||||
|
- name: '<{{ cmd | upper }}> | 创建 Rocketmq Exporter 安装标记'
|
||||||
|
shell: |
|
||||||
|
set -ex
|
||||||
|
mkdir -p ~/.flag
|
||||||
|
touch {{ flag }}
|
||||||
|
|
||||||
|
when:
|
||||||
|
- cmd == "install"
|
||||||
|
- not ret.stat.exists
|
||||||
|
- ansible_architecture == "x86_64"
|
||||||
|
|
||||||
|
# 卸载 Rocketmq Exporter
|
||||||
|
- block:
|
||||||
|
- name: '<{{ cmd | upper }}> | 卸载 Rocketmq Exporter'
|
||||||
|
shell: |
|
||||||
|
. /etc/profile
|
||||||
|
cd {{ rocketmq_exporter.dir }}
|
||||||
|
docker-compose down
|
||||||
|
|
||||||
|
- name: '<{{ cmd | upper }}> | 清除 Rocketmq Exporter 相关文件'
|
||||||
|
shell: |
|
||||||
|
rm -rf {{ rocketmq_exporter.dir }}
|
||||||
|
rm -rf {{ flag }}
|
||||||
|
|
||||||
|
when:
|
||||||
|
- cmd == "remove"
|
||||||
|
- ret.stat.exists
|
||||||
|
- ansible_architecture == "x86_64"
|
@ -0,0 +1,24 @@
|
|||||||
|
version: "3.9"
|
||||||
|
|
||||||
|
services:
|
||||||
|
rocketmq-exporter:
|
||||||
|
image: {{ rocketmq_exporter.image }}
|
||||||
|
container_name: {{ docker.network.name }}-rocketmq-exporter
|
||||||
|
hostname: rocketmq-exporter
|
||||||
|
restart: always
|
||||||
|
networks:
|
||||||
|
- {{ docker.network.name }}
|
||||||
|
{% for node in rocketmq_exporter.nodes -%}
|
||||||
|
{% if node.host == inventory_hostname -%}
|
||||||
|
ports:
|
||||||
|
- {{ node.port }}:5557
|
||||||
|
volumes:
|
||||||
|
- {{ rocketmq_exporter.dir }}/{{ rocketmq_exporter.jar }}:/rocketmq-exporter/rocketmq-exporter-0.0.2-SNAPSHOT.jar
|
||||||
|
command: "java -jar /rocketmq-exporter/rocketmq-exporter-0.0.2-SNAPSHOT.jar --rocketmq.config.namesrvAddr=http://{{ node.url }} --rocketmq.config.rocketmqVersion={{ node.version }}"
|
||||||
|
{% endif %}
|
||||||
|
{% endfor %}
|
||||||
|
|
||||||
|
networks:
|
||||||
|
{{ docker.network.name }}:
|
||||||
|
external: true
|
||||||
|
name: {{ docker.network.name }}
|
198
prometheus/roles/role.yml
Normal file
198
prometheus/roles/role.yml
Normal file
@ -0,0 +1,198 @@
|
|||||||
|
# 安装 Docker Engine
|
||||||
|
- hosts: dockerce
|
||||||
|
remote_user: root
|
||||||
|
become: yes
|
||||||
|
gather_facts: yes
|
||||||
|
tags:
|
||||||
|
- all
|
||||||
|
- server
|
||||||
|
- exporter
|
||||||
|
- node
|
||||||
|
- docker
|
||||||
|
- mysql
|
||||||
|
- mongodb
|
||||||
|
- redis
|
||||||
|
- rabbitmq
|
||||||
|
- rocketmq
|
||||||
|
- elasticsearch
|
||||||
|
- zookeeper
|
||||||
|
- jmx
|
||||||
|
- nginx
|
||||||
|
- blackbox
|
||||||
|
- promtail
|
||||||
|
- dockerce
|
||||||
|
roles:
|
||||||
|
- role: docker
|
||||||
|
when: cmd == "install"
|
||||||
|
|
||||||
|
# 部署 Prometheus 服务端相关组件
|
||||||
|
- hosts: server
|
||||||
|
remote_user: root
|
||||||
|
become: yes
|
||||||
|
gather_facts: yes
|
||||||
|
tags:
|
||||||
|
- all
|
||||||
|
- server
|
||||||
|
roles:
|
||||||
|
- role: prometheus
|
||||||
|
- role: grafana
|
||||||
|
- role: alertmanager
|
||||||
|
- role: prometheus_alert
|
||||||
|
- role: prometheus_webhook_dingtalk
|
||||||
|
- role: loki
|
||||||
|
|
||||||
|
# 部署 Prometheus Node Exporter 组件
|
||||||
|
- hosts: node
|
||||||
|
remote_user: root
|
||||||
|
become: yes
|
||||||
|
gather_facts: yes
|
||||||
|
tags:
|
||||||
|
- all
|
||||||
|
- exporter
|
||||||
|
- node
|
||||||
|
roles:
|
||||||
|
- role: node_exporter
|
||||||
|
|
||||||
|
# 部署 cAdvisor 组件
|
||||||
|
- hosts: docker
|
||||||
|
remote_user: root
|
||||||
|
become: yes
|
||||||
|
gather_facts: yes
|
||||||
|
tags:
|
||||||
|
- all
|
||||||
|
- exporter
|
||||||
|
- docker
|
||||||
|
roles:
|
||||||
|
- role: cadvisor
|
||||||
|
|
||||||
|
# 部署 Prometheus Blackbox Exporter 组件
|
||||||
|
- hosts: blackbox
|
||||||
|
remote_user: root
|
||||||
|
become: yes
|
||||||
|
gather_facts: yes
|
||||||
|
tags:
|
||||||
|
- all
|
||||||
|
- exporter
|
||||||
|
- blackbox
|
||||||
|
roles:
|
||||||
|
- role: blackbox_exporter
|
||||||
|
|
||||||
|
# 部署 Prometheus Mysqld Exporter 组件
|
||||||
|
- hosts: mysql
|
||||||
|
remote_user: root
|
||||||
|
become: yes
|
||||||
|
gather_facts: yes
|
||||||
|
tags:
|
||||||
|
- all
|
||||||
|
- exporter
|
||||||
|
- mysql
|
||||||
|
roles:
|
||||||
|
- role: mysqld_exporter
|
||||||
|
|
||||||
|
# 部署 Prometheus MongoDB Exporter 组件
|
||||||
|
- hosts: mongodb
|
||||||
|
remote_user: root
|
||||||
|
become: yes
|
||||||
|
gather_facts: yes
|
||||||
|
tags:
|
||||||
|
- all
|
||||||
|
- exporter
|
||||||
|
- mongodb
|
||||||
|
roles:
|
||||||
|
- role: mongodb_exporter
|
||||||
|
|
||||||
|
# 部署 Prometheus Redis Exporter 组件
|
||||||
|
- hosts: redis
|
||||||
|
remote_user: root
|
||||||
|
become: yes
|
||||||
|
gather_facts: yes
|
||||||
|
tags:
|
||||||
|
- all
|
||||||
|
- exporter
|
||||||
|
- redis
|
||||||
|
roles:
|
||||||
|
- role: redis_exporter
|
||||||
|
|
||||||
|
# 部署 Prometheus RabbitMQ Exporter 组件
|
||||||
|
- hosts: rabbitmq
|
||||||
|
remote_user: root
|
||||||
|
become: yes
|
||||||
|
gather_facts: yes
|
||||||
|
tags:
|
||||||
|
- all
|
||||||
|
- exporter
|
||||||
|
- rabbitmq
|
||||||
|
roles:
|
||||||
|
- role: rabbitmq_exporter
|
||||||
|
|
||||||
|
# 部署 Prometheus RocketMQ Exporter 组件
|
||||||
|
- hosts: rocketmq
|
||||||
|
remote_user: root
|
||||||
|
become: yes
|
||||||
|
gather_facts: yes
|
||||||
|
tags:
|
||||||
|
- all
|
||||||
|
- exporter
|
||||||
|
- rocketmq
|
||||||
|
roles:
|
||||||
|
- role: rocketmq_exporter
|
||||||
|
|
||||||
|
# 部署 Prometheus ElasticSearch Exporter 组件
|
||||||
|
- hosts: elasticsearch
|
||||||
|
remote_user: root
|
||||||
|
become: yes
|
||||||
|
gather_facts: yes
|
||||||
|
tags:
|
||||||
|
- all
|
||||||
|
- exporter
|
||||||
|
- elasticsearch
|
||||||
|
roles:
|
||||||
|
- role: elasticsearch_exporter
|
||||||
|
|
||||||
|
# 部署 Prometheus Zookeeper Exporter 组件
|
||||||
|
- hosts: zookeeper
|
||||||
|
remote_user: root
|
||||||
|
become: yes
|
||||||
|
gather_facts: yes
|
||||||
|
tags:
|
||||||
|
- all
|
||||||
|
- exporter
|
||||||
|
- zookeeper
|
||||||
|
roles:
|
||||||
|
- role: zookeeper_exporter
|
||||||
|
|
||||||
|
# 部署 Prometheus JMX Exporter 组件
|
||||||
|
- hosts: jmx
|
||||||
|
remote_user: root
|
||||||
|
become: yes
|
||||||
|
gather_facts: yes
|
||||||
|
tags:
|
||||||
|
- all
|
||||||
|
- exporter
|
||||||
|
- jmx
|
||||||
|
roles:
|
||||||
|
- role: jmx_exporter
|
||||||
|
|
||||||
|
# 部署 Prometheus Nginx Exporter 组件
|
||||||
|
- hosts: nginx
|
||||||
|
remote_user: root
|
||||||
|
become: yes
|
||||||
|
gather_facts: yes
|
||||||
|
tags:
|
||||||
|
- all
|
||||||
|
- exporter
|
||||||
|
- nginx
|
||||||
|
roles:
|
||||||
|
- role: nginx_prometheus_exporter
|
||||||
|
|
||||||
|
# 部署 Promtail 组件
|
||||||
|
- hosts: promtail
|
||||||
|
remote_user: root
|
||||||
|
become: yes
|
||||||
|
gather_facts: yes
|
||||||
|
tags:
|
||||||
|
- all
|
||||||
|
- exporter
|
||||||
|
- promtail
|
||||||
|
roles:
|
||||||
|
- role: promtail
|
2
prometheus/roles/zookeeper_exporter/defaults/main.yml
Normal file
2
prometheus/roles/zookeeper_exporter/defaults/main.yml
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
---
|
||||||
|
flag: ~/.flag/{{ role_name }}
|
61
prometheus/roles/zookeeper_exporter/tasks/main.yml
Normal file
61
prometheus/roles/zookeeper_exporter/tasks/main.yml
Normal file
@ -0,0 +1,61 @@
|
|||||||
|
---
|
||||||
|
# 校验 Zookeeper Exporter 是否安装
|
||||||
|
- name: '<{{ cmd | upper }}> | 校验 Zookeeper Exporter 是否安装'
|
||||||
|
stat:
|
||||||
|
path: '{{ flag }}'
|
||||||
|
register: ret
|
||||||
|
|
||||||
|
# 安装 Zookeeper Exporter
|
||||||
|
- block:
|
||||||
|
- name: '<{{ cmd | upper }}> | 创建 Zookeeper Exporter 相关目录'
|
||||||
|
file:
|
||||||
|
path: '{{ zookeeper_exporter.dir }}'
|
||||||
|
state: directory
|
||||||
|
|
||||||
|
- name: '<{{ cmd | upper }}> | 安装 Zookeeper Exporter'
|
||||||
|
template:
|
||||||
|
src: '{{ item.src }}'
|
||||||
|
dest: '{{ item.dest }}'
|
||||||
|
loop:
|
||||||
|
- src: docker-compose.yml.j2
|
||||||
|
dest: '{{ zookeeper_exporter.dir }}/docker-compose.yml'
|
||||||
|
|
||||||
|
- name: '<{{ cmd | upper }}> | 启动 Zookeeper Exporter 容器'
|
||||||
|
shell: |
|
||||||
|
. /etc/profile
|
||||||
|
cd {{ zookeeper_exporter.dir }}
|
||||||
|
docker-compose down
|
||||||
|
docker-compose up -d
|
||||||
|
|
||||||
|
# - name: '<{{ cmd | upper }}> | 等待 Zookeeper Exporter 服务启动'
|
||||||
|
# wait_for:
|
||||||
|
# port: '{{ zookeeper_exporter.port }}'
|
||||||
|
|
||||||
|
- name: '<{{ cmd | upper }}> | 创建 Zookeeper Exporter 安装标记'
|
||||||
|
shell: |
|
||||||
|
set -ex
|
||||||
|
mkdir -p ~/.flag
|
||||||
|
touch {{ flag }}
|
||||||
|
|
||||||
|
when:
|
||||||
|
- cmd == "install"
|
||||||
|
- not ret.stat.exists
|
||||||
|
- ansible_architecture == "x86_64"
|
||||||
|
|
||||||
|
# 卸载 Zookeeper Exporter
|
||||||
|
- block:
|
||||||
|
- name: '<{{ cmd | upper }}> | 卸载 Zookeeper Exporter'
|
||||||
|
shell: |
|
||||||
|
. /etc/profile
|
||||||
|
cd {{ zookeeper_exporter.dir }}
|
||||||
|
docker-compose down
|
||||||
|
|
||||||
|
- name: '<{{ cmd | upper }}> | 清除 Zookeeper Exporter 相关文件'
|
||||||
|
shell: |
|
||||||
|
rm -rf {{ zookeeper_exporter.dir }}
|
||||||
|
rm -rf {{ flag }}
|
||||||
|
|
||||||
|
when:
|
||||||
|
- cmd == "remove"
|
||||||
|
- ret.stat.exists
|
||||||
|
- ansible_architecture == "x86_64"
|
@ -0,0 +1,22 @@
|
|||||||
|
version: "3.9"
|
||||||
|
|
||||||
|
services:
|
||||||
|
zookeeper-exporter:
|
||||||
|
image: {{ zookeeper_exporter.image }}
|
||||||
|
container_name: {{ docker.network.name }}-zookeeper-exporter
|
||||||
|
hostname: zookeeper-exporter
|
||||||
|
restart: always
|
||||||
|
networks:
|
||||||
|
- {{ docker.network.name }}
|
||||||
|
{% for node in zookeeper_exporter.nodes -%}
|
||||||
|
{% if node.host == inventory_hostname -%}
|
||||||
|
ports:
|
||||||
|
- {{ node.port }}:9141
|
||||||
|
command: "--zk-hosts='{{ node.url }}' --timeout=5"
|
||||||
|
{% endif %}
|
||||||
|
{% endfor %}
|
||||||
|
|
||||||
|
networks:
|
||||||
|
{{ docker.network.name }}:
|
||||||
|
external: true
|
||||||
|
name: {{ docker.network.name }}
|
Loading…
Reference in New Issue
Block a user