新增部署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