- 1. 创建目录。
- 2. 创建prometheus的配置文件prometheus.yml并放入conf文件夹。
- 3. 创建docker-compose.yml文件并放在根目录。
- 4. 配置exporter。
- 5. 以上准备工作都做好后,开始实操。
- 6. Spring项目集成。
- 7. 附录。
- Prometheus官方文档">7.1 Prometheus官方文档
- Prometheus中文文档">7.2 Prometheus中文文档
- thanos">7.3 prometheus集群方案thanos
- thanos集群方案参考">7.4 thanos集群方案参考
- docker监控方案">7.5 docker监控方案
- alertmanager">7.6 集成alertmanager
- pushgateway">7.7 集成pushgateway
Prometheus是一个开源的监控报警系统,搭配prometheus进行监控,支持多种exporter数据采集方式,支持pushgateway上报数据,Prometheus性能足够支撑上万台规模的集群。
搭建环境是基于Docker,Docker Compose。
Prometheus is an open-source systems monitoring and alerting toolkit originally built at SoundCloud.
Prometheus collects and stores its metrics as time series data, i.e. metrics information is stored with the timestamp at which it was recorded, alongside optional key-value pairs called labels.
Prometheus 是一个开源系统监控和警报工具包,最初构建于 SoundCloud。
Prometheus 将其指标收集并存储为时间序列数据,即指标信息与记录它的时间戳一起存储,以及称为标签的可选键值对。
1. 创建目录。
mkdir -p prometheus/alertmanager
mkdir -p prometheus/pushgateway
mkdir -p prometheus/grafana/data
mkdir -p prometheus/prometheus/conf
mkdir -p prometheus/prometheus/data
Prometheus目录如下:
.
├── alertmanager
├── docker-compose.yml
├── grafana
│ └── data
│ ├── csv
│ ├── grafana.db
│ ├── plugins
│ └── png
├── prometheus
│ ├── conf
│ │ └── prometheus.yml
│ └── data
└── pushgateway
2. 创建prometheus的配置文件prometheus.yml并放入conf文件夹。
prometheus.yml的参考配置。
scrape_configs:
- job_name: prometheus
static_configs:
- targets: ['192.168.3.77:9090']
labels:
instance: prometheus
- job_name: 'mysql-exporter'
static_configs:
- targets: ['192.168.3.77:9104']
- job_name: 'redis-exporter'
static_configs:
- targets: ['192.168.3.77:9121']
- job_name: 'your-project'
metrics_path: '/your-project/actuator/prometheus'
static_configs:
- targets: ['192.168.3.77:8880']
3. 创建docker-compose.yml文件并放在根目录。
version: '3.8'
services:
prometheus:
container_name: prometheus
image: prom/prometheus:v2.31.1
volumes:
- ./prometheus/conf:/etc/prometheus
- ./prometheus/data:/prometheus
command:
- '--config.file=/etc/prometheus/prometheus.yml'
- '--storage.tsdb.path=/prometheus'
- '--web.console.libraries=/etc/prometheus/console_libraries'
- '--web.console.templates=/etc/prometheus/consoles'
- '--storage.tsdb.retention.time=200h'
- '--web.enable-lifecycle'
ports:
- '9090:9090'
mysqld-exporter:
container_name: mysqld-exporter
image: prom/mysqld-exporter:v0.13.0
external_links:
- mysql-maxscale
links:
- prometheus
environment:
- DATA_SOURCE_NAME=exporter:111111@(192.168.3.77:4006)/
ports:
- '9104:9104'
depends_on:
- prometheus
redis-exporter:
container_name: redis-exporter
image: bitnami/redis-exporter:1.31.1
links:
- prometheus
environment:
- REDIS_ADDR=redis://192.168.3.77:7001
- REDIS_ADDR=redis://192.168.3.77:7002
- REDIS_ADDR=redis://192.168.3.77:7003
- REDIS_ADDR=redis://192.168.3.77:7004
- REDIS_ADDR=redis://192.168.3.77:7005
- REDIS_ADDR=redis://192.168.3.77:7006
- REDIS_PASSWORD=111111
ports:
- '9121:9121'
depends_on:
- prometheus
grafana:
container_name: grafana
image: grafana/grafana:8.2.3
volumes:
- ./grafana/data:/var/lib/grafana
environment:
- GF_SECURITY_ADMIN_USER=admin
- GF_SECURITY_ADMIN_PASSWORD=admin
- GF_USERS_ALLOW_SIGN_UP=false
ports:
- '3000:3000'
depends_on:
- prometheus
4. 配置exporter。
4.1 mysqld-exporter,官方提供。
需要创建账号并授权
CREATE USER 'exporter'@'%' IDENTIFIED BY '111111';
GRANT PROCESS, REPLICATION CLIENT ON *.* TO 'exporter'@'%';
GRANT SELECT ON performance_schema.* TO 'exporter'@'%';
4.2 redis-exporter,非官方提供,Github,Gitee。
5. 以上准备工作都做好后,开始实操。
5.1 启动Prometheus。
docker-compose up
5.2 查看prometheus和exporter状态。
5.2.1 打开浏览器访问。
http://192.168.3.77:9090/targets
5.2.2 查看Endpoint的State,up表示连接成功。
5.3 通过Grafana展示监控数据。
5.3.1 打开浏览器访问。
http://192.168.3.77:3000/
账号/密码:admin/admin
提出修改密码,直接跳过就可以。
5.3.2 添加数据源。
5.3.2.1 数据源管理。
5.3.2.2 添加prometheus数据源。
5.3.2.3 配置prometheus数据源。
5.3.3 导入监控模板。
输入模板 ID: 13625,并点击Load
模板不止这一个,去官网挑个适合自己的。
6. Spring项目集成。
6.1 pom.xml
<!-- Spring监控管理 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!-- prometheus客户端 -->
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-registry-prometheus</artifactId>
<version>1.7.6</version>
</dependency>
<dependency>
<groupId>io.prometheus</groupId>
<artifactId>simpleclient</artifactId>
<version>0.10.0</version>
</dependency>
<!-- 一定要使用jackson,同SpringBoot版本即可 -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>${jackson.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>${jackson.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>${jackson.version}</version>
</dependency>
6.2 application.properties
# 不单独设置端口,默认使用项目启动端口
management.metrics.tags.application=your-project
management.metrics.export.prometheus.enabled=true
management.endpoints.enabled-by-default=false
management.endpoints.web.exposure.include=*
management.endpoint.metrics.enabled=true
management.endpoint.prometheus.enabled=true
management.endpoint.health.show-details=ALWAYS
6.3 自定义interceptor,不要拦截”/actuator/**”。
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry
.addInterceptor(yourInterceptor())
.excludePathPatterns("/actuator/**");
}
6.4 系统中的HttpMessageConverter,不要使用fastjson,一定要使用jackson。
使用fastjson时,打开6.5中的地址,被监控的系统会报错误:
ERROR : HttpMessageNotWritableException: No converter for [class java.lang.String] with preset Content-Type 'null'
org.springframework.http.converter.HttpMessageNotWritableException: No converter for [class java.lang.String] with preset Content-Type 'null'
同时,prometheus也会报错误:
"INVALID" is not a valid start token
6.5 打开浏览器并访问http://192.168.3.77:8880/your-project/actuator/prometheus
7. 附录。
7.1 Prometheus官方文档
7.2 Prometheus中文文档
7.3 prometheus集群方案thanos
7.4 thanos集群方案参考
7.5 docker监控方案
7.6 集成alertmanager
7.7 集成pushgateway
[