[ Spring ] Integrate Spring Boot Service Monitor Prometheus and Grafana

文章目录

          • [Install Prometheus Server](#Install Prometheus Server)
          • [Install Grafana Server](#Install Grafana Server)
          • [Spring Prometheus Project](#Spring Prometheus Project)
          • [Spring Prometheus Properties](#Spring Prometheus Properties)
          • [Spring Prometheus Application](#Spring Prometheus Application)
          • [Spring Prometheus Configuration](#Spring Prometheus Configuration)
          • [Spring Prometheus Controller](#Spring Prometheus Controller)
          • [Configure Grafana Dash Board](#Configure Grafana Dash Board)
Install Prometheus Server
properties 复制代码
# download package
https://github.com/prometheus/prometheus/releases/download/v3.1.0/prometheus-3.1.0.linux-amd64.tar.gz
properties 复制代码
# edit prometheus config
prometheus-linux-amd64/prometheus.yml
yaml 复制代码
scrape_configs:
  - job_name: "prometheus"
    metrics_path: '/actuator/prometheus'
    scheme: 'http'
    static_configs:
      - targets: ["localhost:10003"]
properties 复制代码
# run server
sudo ./prometheus
properties 复制代码
# visit admin page
http://localhost:9090
Install Grafana Server
properties 复制代码
# download package
https://dl.grafana.com/enterprise/release/grafana-enterprise-11.5.0.linux-amd64.tar.gz
properties 复制代码
# run server
sudo bin/grafana server
properties 复制代码
# visit admin page
http://localhost:3000 admin/admin
Spring Prometheus Project
kotlin 复制代码
pluginManagement {
    repositories {
        gradlePluginPortal()
        google()
        mavenCentral()
    }
}

dependencyResolutionManagement {
    repositoriesMode = RepositoriesMode.PREFER_SETTINGS
    repositories {
        gradlePluginPortal()
        google()
        mavenCentral()
    }
}

buildscript {
    repositories {
        gradlePluginPortal()
        google()
        mavenCentral()
    }
}

plugins {
    id("org.jetbrains.kotlin.jvm") version "2.0.21" apply false
    id("org.jetbrains.kotlin.kapt") version "2.0.21" apply false
    id("org.jetbrains.kotlin.plugin.spring") version "2.0.21" apply false
    id("org.springframework.boot") version "3.4.1" apply false
}

include("prometheus-app")
Spring Prometheus Properties
properties 复制代码
# service
server.port=10003
spring.application.name=prometheus-app
spring.profiles.active=dev
spring.devtools.add-properties=false
management.endpoints.web.exposure.include=*
# prometheus
management.prometheus.metrics.export.enabled=true
Spring Prometheus Application
kotlin 复制代码
package x.spring.hello

import org.springframework.boot.autoconfigure.SpringBootApplication
import org.springframework.boot.runApplication

@SpringBootApplication
class PrometheusApplication

fun main(args: Array<String>) {
    runApplication<PrometheusApplication>(*args)
}
Spring Prometheus Configuration
kotlin 复制代码
package x.spring.hello.component

import io.micrometer.core.instrument.Counter
import io.micrometer.core.instrument.MeterRegistry
import org.springframework.beans.factory.annotation.Value
import org.springframework.context.annotation.Bean
import org.springframework.stereotype.Component

@Component
class MetricsProvider {

    @Bean(name = ["count"])
    fun getCounterMetrics(
        registry: MeterRegistry,
        @Value("\${spring.application.name}") name: String
    ): Counter {
        return registry.counter("count_api_calling_times", "application", name)
    }
}
Spring Prometheus Controller
kotlin 复制代码
package x.spring.hello.controller

import io.micrometer.core.instrument.Counter
import jakarta.annotation.Resource
import org.springframework.web.bind.annotation.GetMapping
import org.springframework.web.bind.annotation.RestController

@RestController
class MetricsController {

    @Resource(name = "count")
    private lateinit var counterMetrics: Counter

    @GetMapping("/count")
    fun count(): String {
        counterMetrics.increment()
        return "count_api_calling_times_total +1"
    }
}
Configure Grafana Dash Board
properties 复制代码
# add data source
Connections -> Data Sources -> Add Data Source -> Prometheus
settings.name=prometheus
connection.url=http://localhost:9090
properties 复制代码
# create dash board
Dashboards -> Create Dashboard -> Add Visualization -> Add Queries -> Run Queries
datasource=prometheus
metrics=count_api_calling_times_total
相关推荐
摇滚侠15 小时前
Spring Boot 3零基础教程,深度理解 Spring Boot 自动配置原理,笔记11
spring boot·笔记·后端
爆更小哇15 小时前
统一功能处理
java·spring boot
hweiyu0019 小时前
Spring Boot 项目集成 Gradle:构建、测试、打包全流程教程
java·spring boot·后端·gradle
一勺菠萝丶19 小时前
Spring Boot 项目启动报错:`Could not resolve type id ... no such class found` 终极解决方案!
java·spring boot·后端
摇滚侠1 天前
Spring Boot 3零基础教程,IOC容器中组件的注册,笔记08
spring boot·笔记·后端
程序员小凯1 天前
Spring Boot测试框架详解
java·spring boot·后端
程序员小凯1 天前
Spring Boot缓存机制详解
spring boot·后端·缓存
程序媛徐师姐1 天前
Java基于SpringBoot的茶叶商城系统,附源码+文档说明
java·spring boot·java springboot·茶叶商城系统·java茶叶商城系统·茶叶·java茶叶商城
计算机毕业设计木哥1 天前
计算机毕业设计选题推荐:基于SpringBoot和Vue的快递物流仓库管理系统【源码+文档+调试】
java·vue.js·spring boot·后端·课程设计
Chan161 天前
流量安全优化:基于 Sentinel 实现网站流量控制和熔断
java·spring boot·安全·sentinel·intellij-idea·进程