说明
- 本文章目前是入门promethues相关知识,知识入门作用,生产用还需更进一步
目录
- springBoot部署java
- docker运行promethues(包括grafana, altermanage)
- 配置文件
springBoot部署java
- springboot程序参考Spring Boot Actuator 模块 详解:健康检查,度量,指标收集和监控,其中文末有git地址
- 参考Java项目轻松搞定Docker部署文章第一种方法Dockerfile文件部署到本地docker, pom文件
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.2.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.ricstudio</groupId>
<artifactId>springboot-actuator-prometheus-test</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>springboot-actuator-prometheus-test</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
<dockerfile.maven.version>1.4.9</dockerfile.maven.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<!-- Micrometer Prometheus registry -->
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-registry-prometheus</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>com.spotify</groupId>
<artifactId>dockerfile-maven-plugin</artifactId>
<version>${dockerfile.maven.version}</version>
<executions>
<execution>
<id>default</id>
<goals>
<goal>build</goal>
<goal>push</goal>
</goals>
</execution>
</executions>
<configuration>
<!-- 设置镜像名 -->
<repository>springboot-actuator-prometheus-test</repository>
<tag>${project.version}</tag>
<buildArgs>
<JAR_FILE>${project.build.finalName}.jar</JAR_FILE>
</buildArgs>
</configuration>
</plugin>
</plugins>
</build>
</project>
- dockerfile文件
FROM java:alpine
ARG JAR_FILE
ADD target/${JAR_FILE} springboot-actuator-prometheus-test-0.0.1-SNAPSHOT.jar
EXPOSE 8080
ENTRYPOINT ["java","-jar","/springboot-actuator-prometheus-test-0.0.1-SNAPSHOT.jar","--spring.profiles.active=prod"]
- 使用maven clean install之后,部署到docker上去,当然其中也遇到了问题参考参考文章2,3之后解决。
- docker运行
docker run -p 8080:8080 --name springboot-actuator-prometheus-test springboot-actuator-prometheus-test:0.0.1-SNAPSHOT -d --link springboot-actuator-prometheus-test
docker运行promethues(包括grafana, altermanage)
-
promethues安装是用docker拉取promethues镜像(拉取镜像方式网上很多), 然后文件挂载方式启动promethues。我这边使用的是mac电脑,mac电脑的/Users/seegerlin/Desktop/prometheus-data是本机的文件夹。后续配置文件修改只需要修改这里重启即可,当然也可以设置热部署,这里只是简单学习不做深入。
image.png
docker run -d -p 9090:9090 \
-v /Users/seegerlin/Desktop/prometheus-data:/etc/prometheus \
prom/prometheus --config.file=/etc/prometheus/prometheus.yml
- prometheus.yml配置文件需要配置拉取java服务器的ip + port。这里我是先用
docker ps查看java应用的id号
docker exec -u root -it c876f5897d7b sh 进入java应用
cat /etc/hosts查看docker ip
然后再设置对应ip
- grafana安装的时候我是先拉取镜像,然后直接运行对应的docker镜像
docker images ---> docker run imageid
- 运行altermanage先拉取镜像,再使用文件挂载形势运行
docker run --name alertmanager -d -p 9093:9093 -v /Users/seegerlin/Desktop/alertmanager-data:/alertmanager-data \
prom/alertmanager --config.file=/alertmanager-data/alertmanager.yml
- altermanage的设置我参考了参考文章5,7, 8,9
- 注意参考文章5,8有更进一步的原理解析,当然也只是宏观上的解析
配置文件
- promethues配置文件promethues.yml
# my global config
global:
scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
# scrape_timeout is set to the global default (10s).
# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:
# The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
- job_name: 'prometheus'
# metrics_path defaults to '/metrics'
# scheme defaults to 'http'.
static_configs:
- targets: ['localhost:9090']
# demo job
- job_name: 'springboot-actuator-prometheus-test' # job name
metrics_path: '/actuator/prometheus' # 指标获取路径
scrape_interval: 5s # 间隔
basic_auth: # Spring Security basic auth
username: 'actuator'
password: 'actuator'
static_configs:
- targets: ['172.17.0.5:8080'] # 实例的地址,默认的协议是http
alerting:
alertmanagers:
- static_configs:
- targets:
# alertmanage default start port 9093
- 172.17.0.3:9093
rule_files:
- rules/*.yml
- promethues设置报警规则test-svc-alert-rule.yml文件
groups:
- name: svc-alert-rule
rules:
- alert: svc-down # 服务是否下线
expr: sum(up{job="springboot-actuator-prometheus-test"}) == 0
for: 1m
labels: # 自定义标签
severity: critical
annotations:
summary: "订单服务已下线,请检查!!"
- alert: order-error-rate-high # 10分钟内下单失败率是否大于10%
expr: sum(rate(requests_error_total{application="springboot-actuator-prometheus-test"}[10m])) / sum(rate(order_request_count_total{application="springboot-actuator-prometheus-test"}[10m])) > 0.1
for: 1m
labels:
severity: major
annotations:
summary: "订单服务响应异常!!"
description: "10分钟订单错误率已经超过10% (当前值: {{ $value }} !!!"
- altermanage配置文件
# 全局配置
global:
resolve_timeout: 5m
smtp_smarthost: 'smtp.qq.com:465'
# 邮件来源
smtp_from: '***@qq.com'
# 用户名
smtp_auth_username: '****@qq.com'
# 授权码,非密码,参考文章7有说咋操作
smtp_auth_password: '***'
smtp_require_tls: false
smtp_hello: 'qq.com'
# 路由配置
route:
receiver: 'mail' # 父节点
group_by: ['alertname'] # 分组规则
group_wait: 10s # 为了能够一次性收集和发送更多的相关信息时,可以通过group_wait参数设置等待时间
group_interval: 1m #定义相同的Group之间发送告警通知的时间间隔
repeat_interval: 1m
# 告警接收者配置
receivers:
- name: 'mail'
email_configs:
# 发到哪里
- to: '****@qq.com'
send_resolved: true
参考文章
- Java项目轻松搞定Docker部署
- Docker启动SpringBoot项目报错,提示unablet to access jarfile app.jar
- 通过maven 打docker 镜像包,出错ADD failed: stat /var/lib/docker/tmp/docker-builderXXXXXX: no such file or dir
- Spring Boot Actuator 模块 详解:健康检查,度量,指标收集和监控
- Spring Boot 微服务应用集成Prometheus + Grafana 实现监控告警
- docker运行grafana
- qq授权码设置
- Prometheus+Alertmanager实现邮件报警
- Docker部署Prometheus实现微信邮件报警
网友评论