Skip to content

Commit 401945b

Browse files
authored
#88 Setup Prometheus & Grafana, Spring & Minio & Postgres metrics (#99)
1 parent 083b1e6 commit 401945b

File tree

24 files changed

+200
-34
lines changed

24 files changed

+200
-34
lines changed
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,19 @@
11
package ru.ifmo.se.dating.authik.security
22

3+
import org.springframework.http.HttpMethod
34
import org.springframework.security.web.server.util.matcher.ServerWebExchangeMatcher
45
import org.springframework.stereotype.Component
5-
import ru.ifmo.se.dating.spring.security.auth.SpringSecuredPaths
6+
import ru.ifmo.se.dating.spring.security.auth.And
7+
import ru.ifmo.se.dating.spring.security.auth.Not
68
import ru.ifmo.se.dating.spring.security.auth.Path
9+
import ru.ifmo.se.dating.spring.security.auth.SpringSecuredPaths
710

811
@Component
912
class AuthikSecuredPaths : SpringSecuredPaths {
10-
override val matcher: ServerWebExchangeMatcher = Path("")
13+
override val matcher: ServerWebExchangeMatcher = And(
14+
Path("/api/**"),
15+
Not(Path("/api/auth/telegram/web-app", HttpMethod.GET)),
16+
Not(Path("/api/monitoring/healthcheck", HttpMethod.PUT)),
17+
Not(Path("/actuator/**", HttpMethod.GET)),
18+
)
1119
}

backend/config/build.gradle.kts

+4-3
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,14 @@ plugins {
33
}
44

55
dependencies {
6-
implementation(project(":starter-service-discovery"))
7-
implementation(project(":starter-tls"))
8-
96
implementation(libs.org.springframework.boot.spring.boot)
107
implementation(libs.org.springframework.boot.spring.boot.starter.web)
118
implementation(libs.org.springframework.cloud.spring.cloud.config.server)
129

10+
implementation(project(":starter-monitoring"))
11+
implementation(project(":starter-service-discovery"))
12+
implementation(project(":starter-tls"))
13+
1314
testImplementation(libs.org.springframework.boot.spring.boot.starter.test)
1415
testImplementation(libs.junit.junit)
1516
testImplementation(libs.org.testcontainers.vault)

backend/config/src/main/resources/application.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
spring:
22
config:
3-
import: application-service-discovery.yml,application-tls.yml
3+
import: application-monitoring.yml,application-service-discovery.yml,application-tls.yml
44
application:
55
name: config
66
profiles:

backend/foundation/build.gradle.kts

+1
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ plugins {
55
}
66

77
dependencies {
8+
api(project(":starter-monitoring"))
89
api(project(":starter-service-discovery"))
910
api(project(":starter-tls"))
1011

backend/foundation/src/main/resources/application-foundation.yml

+1-10
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
spring:
22
config:
3-
import: application-service-discovery.yml,application-tls.yml,optional:configserver:https://config.dating.se.ifmo.ru:8080
3+
import: application-monitoring.yml,application-service-discovery.yml,application-tls.yml,optional:configserver:https://config.dating.se.ifmo.ru:8080
44
cloud:
55
config:
66
uri: https://config.dating.se.ifmo.ru:8080
@@ -27,12 +27,3 @@ springdoc:
2727
swagger-ui:
2828
url: /openapi/api.yml
2929
path: /swagger-ui.html
30-
logging:
31-
level:
32-
web: INFO
33-
liquibase: WARN
34-
r2dbc: DEBUG
35-
group:
36-
r2dbc: org.springframework.r2dbc,org.springframework.data.r2dbc,org.jooq.tools.LoggerListener
37-
pattern:
38-
console: "%clr(%d{yyyy-MM-dd'T'HH:mm:ss.SSS}){faint} %clr([%level]) %clr(%logger{36}){blue}: %msg%n"

backend/gateway/build.gradle.kts

+1
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ plugins {
33
}
44

55
dependencies {
6+
implementation(project(":starter-monitoring"))
67
implementation(project(":starter-service-discovery"))
78
implementation(project(":starter-tls"))
89

backend/gateway/src/main/resources/application.yml

+1-8
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
spring:
22
config:
3-
import: application-service-discovery.yml,application-tls.yml
3+
import: application-monitoring.yml,application-service-discovery.yml,application-tls.yml
44
application:
55
name: gateway
66
cloud:
@@ -146,10 +146,3 @@ springdoc:
146146
url: openapi/matchmaker/api.yml
147147
- name: people
148148
url: openapi/people/api.yml
149-
logging:
150-
level:
151-
gateway: WARN
152-
group:
153-
gateway: org.springframework.cloud.gateway.route
154-
pattern:
155-
console: "%clr(%d{yyyy-MM-dd'T'HH:mm:ss.SSS}){faint} %clr([%level]) %clr(%logger{36}){blue}: %msg%n"

backend/gradle/libs.versions.toml

+4
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@ commons-codec-commons-codec = "1.17.1"
2424
org-jetbrains-kotlinx-kotlinx-coroutines = "1.9.0"
2525
io-projectreactor-kotlin-reactor-kotlin-extensions = "1.2.3"
2626

27+
io-micrometer = "1.14.3"
28+
2729
io-projectreactor-reactor-test = "3.6.11"
2830
junit-junit = "4.13.2"
2931
org-testcontainers = "1.20.3"
@@ -76,6 +78,8 @@ org-liquibase-liquibase-core = { module = "org.liquibase:liquibase-core", versio
7678
org-postgresql-postgresql = { module = "org.postgresql:postgresql", version.ref = "org-postgresql-postgresql" }
7779
org-postgresql-r2dbc-postgresql = { module = "org.postgresql:r2dbc-postgresql", version.ref = "org-postgresql-r2dbc-postgresql" }
7880

81+
io-micrometer-micrometer-registry-prometheus = { module = "io.micrometer:micrometer-registry-prometheus", version.ref = "io-micrometer" }
82+
7983
junit-junit = { module = "junit:junit", version.ref = "junit-junit" }
8084
org-testcontainers-postgresql = { module = "org.testcontainers:postgresql", version.ref = "org-testcontainers" }
8185
org-testcontainers-r2dbc = { module = "org.testcontainers:r2dbc", version.ref = "org-testcontainers" }

backend/grafana/Dockerfile

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
FROM grafana/grafana
2+
3+
ADD ./provisioning /etc/grafana/provisioning
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
apiVersion: 1
2+
datasources:
3+
- name: Prometheus
4+
label: Prometheus
5+
type: prometheus
6+
access: proxy
7+
url: http://${ITMO_DATING_PROMETHEUS_HOST}:9090
8+
isDefault: true

backend/haproxy/config/haproxy.cfg

+5
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,14 @@ defaults
1818
frontend internal
1919
bind :8445 ssl crt /usr/local/etc/haproxy/itmo-dating-backend.pem
2020
bind :8446 ssl crt /usr/local/etc/haproxy/itmo-dating-backend.pem
21+
bind :8447
2122
bind :8455 ssl crt /usr/local/etc/haproxy/itmo-dating-backend.pem
2223
bind :8456 ssl crt /usr/local/etc/haproxy/itmo-dating-backend.pem
2324
bind :8457 ssl crt /usr/local/etc/haproxy/itmo-dating-backend.pem
2425

2526
use_backend vault if { dst_port 8445 }
2627
use_backend consul if { dst_port 8446 }
28+
use_backend grafana if { dst_port 8447 }
2729
use_backend authik if { dst_port 8455 }
2830
use_backend matchmaker if { dst_port 8456 }
2931
use_backend people if { dst_port 8457 }
@@ -36,6 +38,9 @@ backend consul
3638
option httpchk GET /ui
3739
server consul server.dc1.consul:8500 check init-addr last,libc,none
3840

41+
backend grafana
42+
server grafana grafana.dating.se.ifmo.ru:3000 check init-addr last,libc,none
43+
3944
backend authik
4045
balance roundrobin
4146
option httpchk GET /actuator/health

backend/matchmaker/src/main/kotlin/ru/ifmo/se/dating/matchmaker/security/MatchmakerSecuredPaths.kt

+2
Original file line numberDiff line numberDiff line change
@@ -15,5 +15,7 @@ class MatchmakerSecuredPaths : SpringSecuredPaths {
1515
Not(Path("/api/people/{person_id}", HttpMethod.PUT)),
1616
Not(Path("/api/monitoring/healthcheck", HttpMethod.GET)),
1717
Not(Path("/api/suggestions", HttpMethod.OPTIONS)),
18+
Not(Path("/api/monitoring/healthcheck", HttpMethod.PUT)),
19+
Not(Path("/actuator/**", HttpMethod.GET)),
1820
)
1921
}

backend/people/src/main/kotlin/ru/ifmo/se/dating/people/security/PeopleSecuredPaths.kt

+2-1
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import ru.ifmo.se.dating.spring.security.auth.SpringSecuredPaths
1212
class PeopleSecuredPaths : SpringSecuredPaths {
1313
override val matcher: ServerWebExchangeMatcher = And(
1414
Path("/api/**"),
15-
Not(Path("/api/monitoring/healthcheck", HttpMethod.GET)),
15+
Not(Path("/api/monitoring/healthcheck", HttpMethod.PUT)),
16+
Not(Path("/actuator/**", HttpMethod.GET)),
1617
)
1718
}

backend/prometheus/Dockerfile

+9
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
FROM prom/prometheus:latest
2+
3+
COPY ./prometheus.yml /etc/prometheus/prometheus.yml
4+
5+
CMD [ \
6+
"--config.file=/etc/prometheus/prometheus.yml", \
7+
"--storage.tsdb.retention.size=500MB", \
8+
"--storage.tsdb.retention.time=3d" \
9+
]

backend/prometheus/prometheus.yml

+67
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
global:
2+
scrape_interval: 5s
3+
4+
scrape_configs:
5+
6+
- job_name: authik
7+
metrics_path: /actuator/prometheus
8+
dns_sd_configs:
9+
- names:
10+
- authik-0.dating.se.ifmo.ru
11+
- authik-1.dating.se.ifmo.ru
12+
type: A
13+
port: 8080
14+
scheme: https
15+
tls_config:
16+
insecure_skip_verify: true
17+
18+
- job_name: people
19+
metrics_path: /actuator/prometheus
20+
dns_sd_configs:
21+
- names:
22+
- people-0.dating.se.ifmo.ru
23+
- people-1.dating.se.ifmo.ru
24+
type: A
25+
port: 8080
26+
scheme: https
27+
tls_config:
28+
insecure_skip_verify: true
29+
30+
- job_name: matchmaker
31+
metrics_path: /actuator/prometheus
32+
dns_sd_configs:
33+
- names:
34+
- matchmaker-0.dating.se.ifmo.ru
35+
- matchmaker-1.dating.se.ifmo.ru
36+
type: A
37+
port: 8080
38+
scheme: https
39+
tls_config:
40+
insecure_skip_verify: true
41+
42+
- job_name: gateway
43+
metrics_path: /actuator/prometheus
44+
dns_sd_configs:
45+
- names:
46+
- gateway.dating.se.ifmo.ru
47+
type: A
48+
port: 8080
49+
scheme: https
50+
tls_config:
51+
insecure_skip_verify: true
52+
53+
- job_name: object-storage
54+
metrics_path: /minio/v2/metrics/cluster
55+
dns_sd_configs:
56+
- names:
57+
- object-storage.dating.se.ifmo.ru
58+
type: A
59+
port: 9000
60+
scheme: http
61+
62+
- job_name: postgres
63+
dns_sd_configs:
64+
- names:
65+
- database-primary-exporter.dating.se.ifmo.ru
66+
type: 'A'
67+
port: 9187

backend/settings.gradle.kts

+1
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ include(
1212
":authik",
1313
":matchmaker",
1414
":people",
15+
":starter-monitoring",
1516
":starter-service-discovery",
1617
":starter-tls",
1718
)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
plugins {
2+
id("buildlogic.kotlin-library-conventions")
3+
kotlin("plugin.spring")
4+
}
5+
6+
dependencies {
7+
api(project(":starter-tls"))
8+
9+
api(libs.org.springframework.boot.spring.boot.starter.actuator)
10+
api(libs.io.micrometer.micrometer.registry.prometheus)
11+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
spring:
2+
config:
3+
import: application-tls.yml
4+
management:
5+
endpoints:
6+
web:
7+
exposure:
8+
include: health,prometheus
9+
health:
10+
diskspace:
11+
enabled: false
12+
metrics:
13+
export:
14+
prometheus:
15+
enabled: true
16+
distribution:
17+
percentiles-histogram:
18+
"[http.server.requests]": true
19+
logging:
20+
level:
21+
web: INFO
22+
liquibase: WARN
23+
r2dbc: DEBUG
24+
gateway: WARN
25+
group:
26+
r2dbc: org.springframework.r2dbc,org.springframework.data.r2dbc,org.jooq.tools.LoggerListener
27+
gateway: org.springframework.cloud.gateway.route
28+
pattern:
29+
console: "%clr(%d{yyyy-MM-dd'T'HH:mm:ss.SSS}){faint} %clr([%level]) %clr(%logger{36}){blue}: %msg%n"

backend/starter-service-discovery/build.gradle.kts

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@ plugins {
55

66
dependencies {
77
api(project(":starter-tls"))
8+
api(project(":starter-monitoring"))
89

9-
api(libs.org.springframework.boot.spring.boot.starter.actuator)
1010
api(libs.org.springframework.cloud.spring.cloud.starter.consul.discovery)
1111
api(libs.org.springframework.cloud.spring.cloud.starter.loadbalancer)
1212
}

backend/starter-service-discovery/src/main/resources/application-service-discovery.yml

+1-7
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
spring:
22
config:
3-
import: application-tls.yml
3+
import: application-tls.yml,application-monitoring.yml
44
cloud:
55
consul:
66
scheme: https
@@ -24,9 +24,3 @@ management:
2424
health:
2525
consul:
2626
enabled: true
27-
diskspace:
28-
enabled: false
29-
endpoints:
30-
web:
31-
exposure:
32-
include: health

backend/starter-tls/build.gradle.kts

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ plugins {
44
}
55

66
dependencies {
7-
api(libs.org.springframework.boot.spring.boot)
7+
api(libs.org.springframework.spring.context)
88
api(libs.org.springframework.spring.web)
99
api(libs.org.springframework.spring.webflux)
1010
implementation("io.netty:netty-handler:4.1.117.Final")

0 commit comments

Comments
 (0)