美文网首页
docker本地部署promethues+alertmanage

docker本地部署promethues+alertmanage

作者: 后来丶_a24d | 来源:发表于2020-08-09 22:34 被阅读0次

说明

  • 本文章目前是入门promethues相关知识,知识入门作用,生产用还需更进一步

目录

  • springBoot部署java
  • docker运行promethues(包括grafana, altermanage)
  • 配置文件

springBoot部署java

<?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)

  1. 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
  1. prometheus.yml配置文件需要配置拉取java服务器的ip + port。这里我是先用
docker ps查看java应用的id号
docker exec -u root -it c876f5897d7b sh 进入java应用
cat  /etc/hosts查看docker ip

然后再设置对应ip

  1. grafana安装的时候我是先拉取镜像,然后直接运行对应的docker镜像
docker images ---> docker run imageid
  1. 运行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
  1. altermanage的设置我参考了参考文章5,7, 8,9
  2. 注意参考文章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


参考文章

  1. Java项目轻松搞定Docker部署
  2. Docker启动SpringBoot项目报错,提示unablet to access jarfile app.jar
  3. 通过maven 打docker 镜像包,出错ADD failed: stat /var/lib/docker/tmp/docker-builderXXXXXX: no such file or dir
  4. Spring Boot Actuator 模块 详解:健康检查,度量,指标收集和监控
  5. Spring Boot 微服务应用集成Prometheus + Grafana 实现监控告警
  6. docker运行grafana
  7. qq授权码设置
  8. Prometheus+Alertmanager实现邮件报警
  9. Docker部署Prometheus实现微信邮件报警

相关文章

网友评论

      本文标题:docker本地部署promethues+alertmanage

      本文链接:https://www.haomeiwen.com/subject/zkmrdktx.html