Extend monitoring and update portfolio

Add hostmetrics receiver and OTel Collector telemetry, and move
Alertmanager and Blackbox scraping to the collector. Raise collector
memory limits, restrict Blackbox to HTTP 200, and add collector and
Caddy down alerts with inhibition. Update portfolio title and copy.
This commit is contained in:
2026-08-05 19:49:18 +00:00
parent d38b941e0e
commit ede28f6d12
8 changed files with 82 additions and 31 deletions
+1 -1
View File
@@ -3,7 +3,7 @@ modules:
prober: http
timeout: 5s
http:
valid_status_codes: []
valid_status_codes: [200]
method: GET
preferred_ip_protocol: "ip4"
tls_config:
+3 -3
View File
@@ -20,7 +20,7 @@ services:
- prometheus_network
woodpecker_server:
image: woodpeckerci/woodpecker-server:v3.16-alpine
image: woodpeckerci/woodpecker-server:v3.17-alpine
volumes:
- woodpeckerdata:/var/lib/woodpecker/
entrypoint: /bin/sh -c "export WOODPECKER_GITEA_CLIENT=$$(cat /run/secrets/woodpecker_gitea_client) && export WOODPECKER_GITEA_SECRET=$$(cat /run/secrets/woodpecker_gitea_secret) && export WOODPECKER_AGENT_SECRET=$$(cat /run/secrets/woodpecker_agent_secret) && /bin/woodpecker-server"
@@ -37,7 +37,7 @@ services:
- woodpecker_gitea_secret
woodpecker_agent:
image: woodpeckerci/woodpecker-agent:v3.16-alpine
image: woodpeckerci/woodpecker-agent:v3.17-alpine
volumes:
- /var/run/docker.sock:/var/run/docker.sock
entrypoint: /bin/sh -c "export WOODPECKER_AGENT_SECRET=$$(cat /run/secrets/woodpecker_agent_secret) && /bin/woodpecker-agent"
@@ -51,7 +51,7 @@ services:
- woodpecker_agent_secret
gitea:
image: docker.gitea.com/gitea:1.27.0
image: docker.gitea.com/gitea:1.27.1
environment:
- USER_UID=1000
- USER_GID=1000
+7 -1
View File
@@ -57,10 +57,16 @@ services:
configs:
- source: otel_collector_config
target: /etc/otelcol-contrib/config.yaml
volumes:
- /:/hostfs:ro
- /proc:/hostfs/proc:ro
- /sys:/hostfs/sys:ro
- /dev:/hostfs/dev:ro
- /run:/hostfs/run:ro
deploy:
resources:
limits:
memory: 256M
memory: 512M
networks:
- prometheus_network
+42 -2
View File
@@ -3,6 +3,17 @@ receivers:
protocols:
http:
endpoint: 0.0.0.0:4318
hostmetrics:
root_path: /hostfs
collection_interval: 10s
scrapers:
cpu:
memory:
disk:
filesystem:
network:
load:
processes:
prometheus:
config:
scrape_configs:
@@ -18,11 +29,32 @@ receivers:
scrape_interval: 10s
static_configs:
- targets: ['herald:9100']
- job_name: alertmanager
scrape_interval: 10s
static_configs:
- targets: ['alertmanager:9093']
- job_name: blackbox_http
scrape_interval: 10s
metrics_path: /probe
params:
module: [http_2xx]
static_configs:
- targets:
- https://www.qpismont.fr
- https://gitea.qpismont.fr
- https://woodpecker.qpismont.fr
relabel_configs:
- source_labels: [__address__]
target_label: __param_target
- source_labels: [__param_target]
target_label: instance
- target_label: __address__
replacement: blackbox_exporter:9115
processors:
memory_limiter:
check_interval: 5s
limit_mib: 200
limit_mib: 400
spike_limit_mib: 50
batch:
timeout: 10s
@@ -35,9 +67,17 @@ exporters:
endpoint: http://tempo:4318
service:
telemetry:
metrics:
readers:
- pull:
exporter:
prometheus:
host: 0.0.0.0
port: 8888
pipelines:
metrics:
receivers: [otlp, prometheus]
receivers: [otlp, prometheus, hostmetrics]
processors: [memory_limiter, batch]
exporters: [prometheusremotewrite]
traces:
+4 -5
View File
@@ -3,11 +3,11 @@
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="Portfolio of a platform / infrastructure engineer: distributed systems, observability, security and self-hosted CI/CD, tested in production.">
<title>Portfolio — Platform Engineer</title>
<meta name="description" content="Portfolio of Quentin Pismont, senior/lead platform engineer: distributed systems, observability, security and self-hosted CI/CD, tested in production.">
<title>Quentin Pismont — Senior/Lead Platform Engineer</title>
<!-- Open Graph -->
<meta property="og:type" content="website">
<meta property="og:title" content="Portfolio — Platform Engineer">
<meta property="og:title" content="Quentin Pismont — Senior/Lead Platform Engineer">
<meta property="og:description" content="Self-hosted infrastructure running in production, a security-first AI agent in Rust, and a distributed media pipeline. Source code available.">
<style>
:root {
@@ -371,8 +371,7 @@
<div class="about-grid reveal">
<div>
<p>
Developer for <strong>over 20 years</strong> (first lines of C at age 10),
working as an engineer for <strong>10 years</strong>. My specialty: designing coherent
Working as an engineer for <strong>10 years</strong>. My specialty: designing coherent
distributed systems and keeping them operable over time.
</p>
<p>
+16
View File
@@ -9,3 +9,19 @@ groups:
annotations:
summary: "{{ $labels.instance }} est down"
description: "Le service {{ $labels.instance }} ne répond plus depuis plus d'1 minute."
- alert: OtelCollectorDown
expr: up{job="otel-collector"} == 0
for: 1m
labels:
severity: critical
annotations:
summary: "OTel Collector est down"
description: "L'OTel Collector ne répond plus depuis plus d'1 minute."
- alert: CaddyDown
expr: up{job="reverse_caddy"} == 0
for: 1m
labels:
severity: critical
annotations:
summary: "Caddy est down"
description: "Le reverse proxy Caddy ne répond plus depuis plus d'1 minute."
+6
View File
@@ -4,6 +4,12 @@ route:
repeat_interval: 8760h
group_wait: 10s
inhibit_rules:
- source_matchers:
- alertname = "CaddyDown"
target_matchers:
- alertname = "ServiceDown"
receivers:
- name: ntfy
webhook_configs:
+2 -18
View File
@@ -11,23 +11,7 @@ alerting:
- alertmanager:9093
scrape_configs:
- job_name: alertmanager
- job_name: otel-collector
static_configs:
- targets:
- alertmanager:9093
- job_name: blackbox_http
metrics_path: /probe
params:
module: [http_2xx]
static_configs:
- targets:
- https://www.qpismont.fr
- https://gitea.qpismont.fr
- https://woodpecker.qpismont.fr
relabel_configs:
- source_labels: [__address__]
target_label: __param_target
- source_labels: [__param_target]
target_label: instance
- target_label: __address__
replacement: blackbox_exporter:9115
- otel-collector:8888