Docsİşletmeİzleme

İzleme

Prometheus metrikleri, içe aktarmaya hazır bir Grafana gösterge paneli, operatörü "çağırmayı" gerektiren dört koşul için uyarı kuralları, yapılandırılmış günlük iletimi ve Kubernetes probe'ları ile harici çalışma süresi izleyicileri için bir sağlık kontrolü uç noktası.

Genel bakış

Solidus Node, aynı RPC portu (varsayılan 9652) üzerinde, /metrics yolu altında Prometheus uyumlu bir metrik uç noktası sunar. v0.1.0+ sürümlerinde varsayılan olarak etkindir; aşağıdaki yapılandırma bloğunu kontrol edin.

/etc/solidus/config.toml
[telemetry]
prometheus_enabled = true
prometheus_path = "/metrics"
log_format = "json"           # required for log forwarders (Loki, ES, Datadog)
log_level = "info"
/metrics uç noktası yalnızca 127.0.0.1 adresine bağlanır. Başka bir hosttan erişmek için SSH tüneli veya özel bir ağ üzerinden scrape yapan bir Prometheus örneği kullanın.

Prometheus metrikleri

5 alt sistem genelinde 12 metrik serisi sunulur. İhtiyacınızı bulmak için aşağıdan filtreleyin.

MetrikTürÖrnek değer
düğümsolidus_block_height

Bu düğümün gördüğü mevcut blok yüksekliği.

gauge4827392
p2psolidus_peer_count

Şu anda bağlı olan eş sayısı.

gauge47
düğümsolidus_uptime_seconds

Düğüm sürecinin başlamasından bu yana geçen saniye. Yeniden başlatıldığında sıfırlanır.

counter1842301
düğümsolidus_rss_bytes

Resident set size (RSS) — bayt cinsinden süreç bellek tüketimi.

gauge1342177280
konsensüssolidus_consensus_blocks_produced_total

Bu doğrulayıcının önerici olarak ürettiği blok sayısı.

counter14287
konsensüssolidus_consensus_blocks_missed_total

Bu doğrulayıcının önerici seçildiği ama üretemediği blok sayısı.

counter3
konsensüssolidus_consensus_view_changes_total

Bu düğümün gözlemlediği görünüm değişikliği sayısı (BFT zaman aşımı yükselmeleri).

counter142
doğrulayıcısolidus_validator_reputation

Bu doğrulayıcı DID'i için 0-1000 arası itibar puanı.

gauge847
doğrulayıcısolidus_validator_violation_points

Mevcut ihlal puanı sayısı 0-3. Eşik = 3, kesintiyi tetikler.

gauge0
p2psolidus_p2p_bandwidth_in_bytes

Bayt cinsinden birikimli gelen eş trafiği.

counter8847291002
p2psolidus_p2p_bandwidth_out_bytes

Bayt cinsinden birikimli giden eş trafiği.

counter6219384172
depolamasolidus_storage_disk_used_bytes

Solidus veri dizini tarafından tüketilen disk alanı.

gauge699035811840

Prometheus sunucunuz için scrape yapılandırması:

prometheus.yml
scrape_configs:
  - job_name: 'solidus-node'
    scrape_interval: 15s
    static_configs:
      - targets: ['localhost:9652']
        labels:
          environment: 'mainnet'
          tier: 'subnet'

Grafana gösterge paneli

Önceden hazırlanmış bir Grafana gösterge paneli JSON'u her sürümle birlikte gelir. Operatör gösterge panelinin genel bakış ekranını birebir yansıtır — aynı paneller, aynı renk paleti — böylece iki arayüz aynı ürünmüş gibi hissettirir.

Solidus Node · Genel BakışSon 1s · 15sn'de bir yenile
Blok yüksekliği
solidus_block_height

4,827,392

Eş sayısı
solidus_peer_count

47

RSS belleği
solidus_rss_bytes

1.24 GB

TPS
consensus

1,247

Çalışma süresi (30g)
solidus_uptime_seconds

99.97%

İhlal puanları
solidus_validator_violation_points

0 / 3

TEMİZ

Solidus Node Gösterge Paneli

12 panel · herhangi bir Grafana 9+ örneğiyle çalışır

Gösterge paneli JSON'u v0.1.0 ile birlikte gelir

İçe aktarmak için:

  1. 1Grafana'da Dashboards → Import menüsünü açın.
  2. 2solidus-node-dashboard.json dosyasını yükleyin veya içeriğini yapıştırın.
  3. 3Açılır menüden Prometheus veri kaynağınızı seçin.
  4. 4Import'a tıklayın. Paneller bir scrape aralığı içinde dolar.

Uyarı kuralları

Bunları Prometheus alertmanager yapılandırmanıza ekleyin. Operatörü uyandırmaya değer dört koşulu kapsarlar — bunların dışındaki her şey günlük özete düşmelidir.

alertmanager/rules.yml
groups:
  - name: solidus-node-critical
    rules:
      - alert: NodeDown
        expr: up{job="solidus-node"} == 0
        for: 2m
        labels:
          severity: critical
        annotations:
          summary: "Solidus node {{ $labels.instance }} is down"

      - alert: LowPeerCount
        expr: solidus_peer_count < 3
        for: 5m
        labels:
          severity: warning
        annotations:
          summary: "Low peer count: {{ $value }} (expected >= 3)"

      - alert: DiskCritical
        expr: (solidus_storage_disk_used_bytes
               / node_filesystem_size_bytes{mountpoint="/var/lib/solidus"})
              > 0.90
        for: 10m
        labels:
          severity: critical
        annotations:
          summary: "Disk usage > 90% on {{ $labels.instance }}"

      - alert: SyncStalled
        expr: rate(solidus_block_height[5m]) == 0
        for: 5m
        labels:
          severity: critical
        annotations:
          summary: "Block height has not advanced for 5 minutes"

Neden bu dördü?

Her biri, operatörün elle müdahale etmesi gereken ayrı bir hata moduna doğrudan karşılık gelir: çökmüş süreç (NodeDown), ağ bölünmesi (LowPeerCount), depolama tükenmesi (DiskCritical) veya tıkanmış konsensüs (SyncStalled). Kalan metrikler kapasite planlaması için faydalıdır, çağrı için değil.

Günlük iletimi

Yapılandırmanızda log_format = "json" ayarıyla, her günlük satırı tek bir JSON nesnesidir. Loki, Elasticsearch, Datadog veya JSON ayrıştıran başka herhangi bir yere iletin.

JSON günlük satırı biçimi

örnek çıktı
{
  "ts":        "2026-03-17T09:41:22.487Z",
  "level":    "INFO",
  "component": "consensus",
  "msg":       "Block finalized",
  "fields": {
    "block_height": 4827392,
    "tx_count":     247,
    "latency_ms":   1832,
    "proposer":     "did:sol:b3d1f8c4a7f2"
  }
}

Loki / Promtail

promtail-config.yaml
scrape_configs:
  - job_name: solidus-node
    journal:
      max_age: 12h
      labels:
        job: solidus-node
    relabel_configs:
      - source_labels: ['__journal__systemd_unit']
        regex: 'solidus-node.service'
        action: keep
    pipeline_stages:
      - json:
          expressions:
            level:     level
            component: component
      - labels:
          level:
          component:

Elasticsearch / Filebeat

filebeat.yml
filebeat.inputs:
  - type: journald
    id: solidus-node
    include_matches.match:
      - _SYSTEMD_UNIT=solidus-node.service
processors:
  - decode_json_fields:
      fields: ["message"]
      target: "solidus"
      overwrite_keys: true
output.elasticsearch:
  hosts: ["https://es.example.internal:9200"]
  index: "solidus-node-%{+yyyy.MM.dd}"

Sağlık kontrolleri

RPC portu üzerinde özel bir /health uç noktası, düğüm sağlığını Kubernetes probe'larına uygun bir biçimde raporlar. Durum kodları hazır olma (readiness) kararını yönlendirir; gövde ise insan gözü içindir.

sağlık kontrolü
# Manuel kontrol
curl -s http://127.0.0.1:9652/health | jq

# Sağlıklı → 200
# Senkronize oluyor → 503 (henüz trafik yönlendirmeyin)
# Bozulmuş → 200 (hâlâ işlevsel, ama işaretlenmiş)
# Kritik → 503

Örnek yanıt — sağlıklı

GET /health
{
  "status":         "healthy",
  "block_height":   4827392,
  "sync_lag":       0,
  "peer_count":     47,
  "uptime_seconds": 1842301,
  "violation_points": 0,
  "checks": {
    "consensus":  "ok",
    "p2p":        "ok",
    "storage":    "ok",
    "validator":  "ok"
  }
}

Kubernetes probe'ları

deployment.yaml
livenessProbe:
  httpGet:
    path: /health
    port: 9652
  initialDelaySeconds: 30
  periodSeconds: 30
  failureThreshold: 3

readinessProbe:
  httpGet:
    path: /health
    port: 9652
  initialDelaySeconds: 60
  periodSeconds: 10
  failureThreshold: 2  # 503 during sync is normal — give it room

Senkronizasyon sırasında 503'te yeniden başlatmayın

Yeni geri yüklenmiş veya yakın zamanda yeniden başlatılmış bir düğüm, ilk 5-30 dakika boyunca syncing (HTTP 503) raporlar. Liveness probe'unda initialDelaySeconds değerini cömertçe ayarlayın — senkronizasyon ortasında yeniden başlatmak, yetişme çalışmasını boşa harcar.
İzleme