This commit is contained in:
1 parent
82251b973f
commit
be08225aaf
9 files changed
+323
-7
No files matched your search
@@ -0,0 +1,11 @@
|
||||
apiVersion: 1
|
||||
|
||||
providers:
|
||||
- name: PDS
|
||||
type: file
|
||||
folder: PDS
|
||||
updateIntervalSeconds: 30
|
||||
allowUiUpdates: false
|
||||
options:
|
||||
path: /var/lib/grafana/dashboards
|
||||
foldersFromFilesStructure: false
|
||||
@@ -0,0 +1,12 @@
|
||||
apiVersion: 1
|
||||
|
||||
datasources:
|
||||
- name: Prometheus
|
||||
uid: pds-prometheus
|
||||
type: prometheus
|
||||
access: proxy
|
||||
url: http://127.0.0.1:9090
|
||||
isDefault: true
|
||||
editable: false
|
||||
jsonData:
|
||||
timeInterval: 15s
|
||||
@@ -0,0 +1,66 @@
|
||||
name: pds-monitoring
|
||||
|
||||
# Self-contained monitoring stack for a self-hosted PDS.
|
||||
# Deployed by Ansible to {{ pds_data_dir }}/monitoring/compose.yaml
|
||||
#
|
||||
# All services bind to 127.0.0.1 — nothing is exposed to the internet.
|
||||
# Reach Grafana via SSH tunnel:
|
||||
# ssh -L 3001:localhost:3001 you@your-pds-host
|
||||
# Then open http://localhost:3001 (admin/admin, change on first login)
|
||||
|
||||
services:
|
||||
node-exporter:
|
||||
container_name: pds-node-exporter
|
||||
image: prom/node-exporter:v1
|
||||
network_mode: host
|
||||
pid: host
|
||||
restart: unless-stopped
|
||||
command:
|
||||
- '--path.procfs=/host/proc'
|
||||
- '--path.sysfs=/host/sys'
|
||||
- '--path.rootfs=/rootfs'
|
||||
- '--collector.filesystem.mount-points-exclude=^/(dev|proc|sys|run|var/lib/docker/.+)($$|/)'
|
||||
- '--web.listen-address=127.0.0.1:9100'
|
||||
volumes:
|
||||
- /proc:/host/proc:ro
|
||||
- /sys:/host/sys:ro
|
||||
- /:/rootfs:ro
|
||||
|
||||
prometheus:
|
||||
container_name: pds-prometheus
|
||||
image: prom/prometheus:v3
|
||||
network_mode: host
|
||||
restart: unless-stopped
|
||||
command:
|
||||
- '--config.file=/etc/prometheus/prometheus.yml'
|
||||
- '--storage.tsdb.path=/prometheus'
|
||||
- '--storage.tsdb.retention.time=15d'
|
||||
- '--web.listen-address=127.0.0.1:9090'
|
||||
# Lets the PDS push OTLP metrics directly — no collector needed
|
||||
- '--web.enable-otlp-receiver'
|
||||
volumes:
|
||||
- ./prometheus.yml:/etc/prometheus/prometheus.yml:ro
|
||||
- prometheus-data:/prometheus
|
||||
|
||||
grafana:
|
||||
container_name: pds-grafana
|
||||
# Grafana publishes no floating major tag — pinned to exact version
|
||||
image: grafana/grafana:{{ pds_grafana_image_tag }}
|
||||
network_mode: host
|
||||
depends_on:
|
||||
- prometheus
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
GF_SERVER_HTTP_ADDR: 127.0.0.1
|
||||
GF_SERVER_HTTP_PORT: 3001
|
||||
GF_ANALYTICS_REPORTING_ENABLED: false
|
||||
GF_ANALYTICS_CHECK_FOR_UPDATES: false
|
||||
GF_USERS_ALLOW_SIGN_UP: false
|
||||
volumes:
|
||||
- ./grafana/provisioning:/etc/grafana/provisioning:ro
|
||||
- ./dashboards:/var/lib/grafana/dashboards:ro
|
||||
- grafana-data:/var/lib/grafana
|
||||
|
||||
volumes:
|
||||
prometheus-data:
|
||||
grafana-data:
|
||||
@@ -33,3 +33,51 @@ PDS_EMAIL_SMTP_URL={{ pds_email_smtp_url }}
|
||||
{% if pds_email_from_address is defined %}
|
||||
PDS_EMAIL_FROM_ADDRESS={{ pds_email_from_address }}
|
||||
{% endif %}
|
||||
{% if pds_service_name is defined %}
|
||||
PDS_SERVICE_NAME={{ pds_service_name }}
|
||||
{% endif %}
|
||||
{% if pds_logo_url is defined %}
|
||||
PDS_LOGO_URL={{ pds_logo_url }}
|
||||
{% endif %}
|
||||
{% if pds_primary_color is defined %}
|
||||
PDS_PRIMARY_COLOR={{ pds_primary_color }}
|
||||
{% endif %}
|
||||
{% if pds_error_color is defined %}
|
||||
PDS_ERROR_COLOR={{ pds_error_color }}
|
||||
{% endif %}
|
||||
{% if pds_warning_color is defined %}
|
||||
PDS_WARNING_COLOR={{ pds_warning_color }}
|
||||
{% endif %}
|
||||
{% if pds_info_color is defined %}
|
||||
PDS_INFO_COLOR={{ pds_info_color }}
|
||||
{% endif %}
|
||||
{% if pds_success_color is defined %}
|
||||
PDS_SUCCESS_COLOR={{ pds_success_color }}
|
||||
{% endif %}
|
||||
{% if pds_home_url is defined %}
|
||||
PDS_HOME_URL={{ pds_home_url }}
|
||||
{% endif %}
|
||||
{% if pds_terms_of_service_url is defined %}
|
||||
PDS_TERMS_OF_SERVICE_URL={{ pds_terms_of_service_url }}
|
||||
{% endif %}
|
||||
{% if pds_privacy_policy_url is defined %}
|
||||
PDS_PRIVACY_POLICY_URL={{ pds_privacy_policy_url }}
|
||||
{% endif %}
|
||||
{% if pds_support_url is defined %}
|
||||
PDS_SUPPORT_URL={{ pds_support_url }}
|
||||
{% endif %}
|
||||
{% if pds_background_light_url is defined %}
|
||||
PDS_BACKGROUND_LIGHT_URL={{ pds_background_light_url }}
|
||||
{% endif %}
|
||||
{% if pds_background_dark_url is defined %}
|
||||
PDS_BACKGROUND_DARK_URL={{ pds_background_dark_url }}
|
||||
{% endif %}
|
||||
{% if pds_telemetry_enabled is defined and pds_telemetry_enabled | bool %}
|
||||
NODE_OPTIONS=--import=@atproto/pds/telemetry
|
||||
OTEL_SERVICE_NAME=pds
|
||||
OTEL_EXPORTER_OTLP_METRICS_ENDPOINT=http://localhost:9090/api/v1/otlp/v1/metrics
|
||||
OTEL_EXPORTER_OTLP_METRICS_PROTOCOL=http/protobuf
|
||||
OTEL_METRIC_EXPORT_INTERVAL=15000
|
||||
OTEL_SEMCONV_STABILITY_OPT_IN=http
|
||||
OTEL_NODE_RESOURCE_DETECTORS=env,host,os,process,serviceinstance,container
|
||||
{% endif %}
|
||||
@@ -0,0 +1,28 @@
|
||||
global:
|
||||
scrape_interval: 15s
|
||||
evaluation_interval: 15s
|
||||
|
||||
# Host metrics are scraped. PDS metrics are *pushed* by the PDS over OTLP to
|
||||
# /api/v1/otlp/v1/metrics (enabled by --web.enable-otlp-receiver in
|
||||
# compose.yaml), so the PDS needs no scrape job here.
|
||||
scrape_configs:
|
||||
- job_name: node
|
||||
static_configs:
|
||||
- targets: ['127.0.0.1:9100']
|
||||
|
||||
- job_name: prometheus
|
||||
static_configs:
|
||||
- targets: ['127.0.0.1:9090']
|
||||
|
||||
otlp:
|
||||
# Keep OTel resource attributes that identify which PDS a series came from
|
||||
promote_resource_attributes:
|
||||
- service.name
|
||||
- service.version
|
||||
- service.instance.id
|
||||
- host.name
|
||||
|
||||
storage:
|
||||
tsdb:
|
||||
# OTLP is a push protocol, so samples can arrive slightly out of order
|
||||
out_of_order_time_window: 30m
|
||||
Reference in new issue
Block a user