Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Yapılandırma başvurusu

helmsight tek bir TOML dosyası okur. Aşağıdakilerden ilk bulunan kullanılır:

  1. --config <yol>
  2. $HELMSIGHT_CONFIG
  3. /etc/helmsight/helmsight.toml
  4. ./helmsight.toml

English version

examples/helmsight.toml her seçeneği yorumlarıyla gösteren bir örnektir. Bir dosyayı helmsight config check ile doğrulayın; hatalar dosyayı, satırı, sütunu ve anahtarı gösterir:

error: helmsight.toml:23:1: `hosts[1].name`: duplicate host name `web-1`
error: helmsight.toml:41:8: `alerts.rules[0].expr`: unknown operator `=>` (use > >= < <= == !=)

Bilinmeyen anahtarlar hatadır; böylece yazım yanlışları sessizce geçmez.

Süreler "500ms", "30s", "5m", "1h30m", "7d", "2w" gibi metinlerdir (ms milisaniye, s saniye, m dakika, h saat, d gün, w hafta).

Gizli değerler düz metin olarak yazılabilir, ancak başvuru kullanmak tercih edilir:

BiçimAnlamı
"secret:<ad>"helmsight secret set <ad> ile veritabanında şifreli saklanan değer
"env:<DEĞİŞKEN>"Bir ortam değişkeninin değeri
"file:<yol>"Bir dosyanın içeriği (sondaki satır sonu atılır)

env: systemd’nin EnvironmentFile= veya konteynerin ortam değişkenleriyle, file: ise Docker/Kubernetes gizli dosyalarıyla (/run/secrets/...) iyi çalışır.

Yapılandırma değişiklikleri yeniden başlatmadan sonra geçerli olur.

Tam bir örnek

# En üst düzey anahtarlar herhangi bir [bölüm] başlığından önce gelmelidir.
hosts_file = "hosts.toml"

[server]
listen = "127.0.0.1:8080"
data_dir = "/var/lib/helmsight"
public_url = "https://monitor.example.com"
trusted_proxies = ["127.0.0.1"]

[auth]
require_totp_for_admins = true

[ssh]
user = "monitor"
identity_files = ["/etc/helmsight/id_ed25519"]

[[alerts.rules]]
id = "disk-full"
expr = "disk_used_pct > 90 for 10m"
severity = "critical"

[[notify]]
id = "ops"
type = "slack"
url = "secret:slack-webhook"

[[certs]]
endpoint = "www.example.com:443"

TOML kuralları gereği bir [bölüm] başlığından sonra yazılan her anahtar o bölüme ait sayılır. hosts_file gibi en üst düzey anahtarları bu yüzden dosyanın en başına yazın; yanlış yere yazılırsa config check bunu bilinmeyen anahtar olarak bildirir.

[server]

AnahtarVarsayılanAçıklama
listen"127.0.0.1:8080"Dinlenecek adres ve port
data_dir"data"Veritabanı, anahtar dosyası, known_hosts ve TLS dosyaları; yapılandırma dosyasına göre göreli
public_urlyokDışarıdan erişilen https:// adresi; OIDC için zorunlu, bildirim bağlantılarında ve köken denetiminde kullanılır
trusted_proxies[]X-Forwarded-For başlığına güvenilen IP adresleri

trusted_proxies istemci adresinin doğru belirlenmesi için önemlidir: oturum açma hız sınırlaması istemci adresine göre çalışır. Vekil sunucu arkasında bu ayar yapılmazsa bütün kullanıcılar vekil sunucunun adresinden geliyormuş gibi görünür.

[server.tls]

AnahtarVarsayılanAçıklama
mode"auto"auto (loopback’te HTTP, diğer adreslerde kendinden imzalı), self-signed, files veya off
cert, keyyokmode = "files" için PEM dosyaları
allow_insecure_httpfalseLoopback olmayan bir adreste mode = "off" kullanılmasına izin verir (TLS vekil sunucusunun arkasında)

Let’s Encrypt sertifikası kullanıyorsanız cert için fullchain.pem, key için privkey.pem dosyasını gösterin ve sertifika yenilendikten sonra helmsight’ı yeniden başlatın (ör. certbot’un --deploy-hook seçeneğiyle).

[auth]

AnahtarVarsayılanAçıklama
session_ttl"12h"En uzun oturum süresi (en az 5m)
idle_timeout"2h"Bu kadar hareketsizlikten sonra oturum sona erer (en az 1m)
require_totp_for_adminsfalseYerel parolası olan yöneticiler arayüzü kullanmadan önce TOTP kaydı yapmak zorundadır
disable_local_loginfalseYalnızca OIDC ile oturum açmaya izin verir

[auth.oidc]

AnahtarVarsayılanAçıklama
issuerzorunluKimlik sağlayıcının adresi; keşif için <issuer>/.well-known/openid-configuration kullanılır
client_idzorunlu
client_secretyokGizli değer başvurusu önerilir
scopes["openid", "profile", "email"]openid içermelidir
role_claim"groups"Grup veya rol adlarını taşıyan alan (claim); realm_access.roles gibi noktalı yollar çalışır
role_map{}Alan değeri → viewer, operator veya admin; en yüksek eşleşme kazanır
default_roleyokEşleşmesi olmayan kullanıcıların rolü; ayarlanmazsa erişim reddedilir
label"Single sign-on"Oturum açma düğmesinin metni

Kimlik sağlayıcıda yönlendirme adresi (redirect URI) olarak <public_url>/api/v1/auth/oidc/callback kaydedin. Roller her oturum açılışında alandan yeniden okunur; yani kimlik sağlayıcıda bir kullanıcının grubunu değiştirmek bir sonraki girişte rolünü de değiştirir.

Örnek (Keycloak):

[auth.oidc]
issuer = "https://sso.example.com/realms/ops"
client_id = "helmsight"
client_secret = "secret:oidc"
role_claim = "realm_access.roles"
role_map = { "helmsight-admin" = "admin", "sre" = "operator", "dev" = "viewer" }
label = "Şirket hesabıyla giriş"

Yerel yönetici hesabını acil durum girişi olarak tutmanız önerilir; SSO çalışmadığında arayüze erişimi kaybetmemek için disable_local_login ayarını dikkatle kullanın.

[ssh]

AnahtarVarsayılanAçıklama
user"monitor"Uzak kullanıcı (sunucu bazında değiştirilebilir)
identity_files[]Sırayla denenen özel anahtar dosyaları
use_agenttrueSSH_AUTH_SOCK üzerindeki anahtarları da dener
known_hosts_files[]Salt okunur olarak kullanılan ek OpenSSH known_hosts dosyaları
accept_new_host_keysfalseYeni sunucuların anahtarlarına otomatik güvenir; değişen anahtarlar yine reddedilir
connect_timeout"10s"TCP bağlantısı, anahtar değişimi ve kimlik doğrulama
command_timeout"30s"Tek bir veri toplama (güncelleme denetimlerine en az 5 dakika verilir)
keepalive"30s"SSH canlı tutma (keepalive) aralığı

[collect]

AnahtarVarsayılanAçıklama
interval"5s"Metrikler: CPU, bellek, yük, diskler, ağ, TCP, süreçler
medium_interval"60s"Dinlenen portlar, servisler, konteynerler, oturumlar
inventory_interval"15m"İşletim sistemi, çekirdek, paketler, etkin birimler, yeniden başlatma işaretleri
auth_interval"5m"Başarısız SSH girişleri
updates_interval"6h"Bekleyen güncellemeler
max_parallel64Aynı anda veri toplanan sunucu sayısı
dnf_updatesfalseBekleyen güncellemeler için dnf/yum çalıştırır (sunucuya günlük dosyası yazarlar)

Başarısız sunucular artan aralıklarla yeniden denenir: ulaşılamadığında 5 dakikaya kadar üstel olarak, kimlik doğrulama hatalarından sonra (saldırı önleme sistemlerini tetiklememek için) 1 ila 5 dakika arasında ve sunucu anahtarı sorunlarında dakikada bir.

interval değerini düşürmek grafiklerin çözünürlüğünü artırır ama hem sunuculardaki hem de veritabanındaki yükü orantılı olarak artırır. Çok sayıda sunucuda 10–15 saniye makul bir başlangıçtır.

[retention]

AnahtarVarsayılanAçıklama
raw"24h"Her örnek (en az 1h)
minute"7d"1 dakikalık ortalama, en düşük ve en yüksek
five_minute"90d"5 dakikalık ortalama, en düşük ve en yüksek
events"90d"Envanter değişiklikleri, çözülmüş alarmlar, başarısız girişler, bildirimler

Grafikler istenen aralığı kapsayan en ince çözünürlüğü seçer. Süreleri uzatmak veritabanını orantılı olarak büyütür. Süresi dolan veriler saatte bir kendiliğinden silinir; özetler dakikada bir hesaplanır.

Sunucular

[[hosts]]

AnahtarVarsayılanAçıklama
namezorunluBenzersiz; harf, rakam, ., -, _
addressad ile aynıSunucu adı veya IP adresi
port22
userssh.user
identity_fileyokOrtak anahtarlardan önce denenen anahtar
groups[]Süzme, kurallar, eylemler, bildirim kanalları ve duvar ekranı belirteçleri için kullanılır
tags[]Serbest biçimli; genellikle env:prod gibi anahtar:değer
baselineyokSapma ve yeni port tespiti için referans alınan sunucu
disabledfalseSunucu listede kalır ama veri toplanmaz

hosts_file

En üst düzeydeki hosts_file = "hosts.toml" başka bir dosyadan (yapılandırma dosyasına göre göreli) ek [[hosts]] kayıtları yükler.

[ssh_config_import]

AnahtarVarsayılanAçıklama
path"~/.ssh/config"OpenSSH istemci yapılandırması
hostszorunluİçe aktarılacak takma adların kalıpları, ör. ["web-*"]
groups, tags[]İçe aktarılan her sunucuya eklenir

HostName, User, Port ve IdentityFile dikkate alınır; eşleşen Host blokları arasında OpenSSH’nin “ilk değer kazanır” kuralı geçerlidir. Aynı adla açıkça yazılmış [[hosts]] kayıtları önceliklidir. ProxyJump olan sunucular uyarıyla atlanır; Match ve Include değerlendirilmez.

Alarmlar

[alerts]

AnahtarVarsayılanAçıklama
unreachable_after"2m"host_unreachable tetiklenmeden önceki bekleme
failed_unitstrueBaşarısız systemd birimleri ve çökmüş OpenRC servisleri için alarm
cert_warning_days21
cert_critical_days7
repeat_interval"4h"Onaylanmamış etkin alarmlar için hatırlatma; "0s" kapatır

Yerleşik kurallar: host_unreachable (critical; kimlik doğrulama hataları için de), host_key_changed (critical), host_key_unknown (warning), failed_units (warning, birim başına bir alarm), cert_expiry (kalan güne göre warning veya critical; denetim başarısız olursa warning).

[[alerts.rules]]

AnahtarVarsayılanAçıklama
idzorunluBenzersiz
exprzorunlu<metrik> <işleç> <eşik> [for <süre>]
severity"warning"info, warning veya critical
summaryyokÜretilen açıklamanın başına eklenir
hosts, groups, tagstüm sunucularKapsam; bir sunucu herhangi bir girdiyle eşleşirse dahil olur

İşleçler: >, >=, <, <=, ==, !=. Eşikler K, M, G, T (1000’in kuvvetleri) ve Ki, Mi, Gi, Ti (1024’ün kuvvetleri) soneklerini kabul eder. Örnek başına metrikler her örnek için (ör. her bağlama noktası için) ayrı alarm üretir. Bir sunucuya ulaşılamadığı sürece onun metrik alarmları çözülmez, durumlarını korur.

Kurallarda kullanılabilen metrikler

MetrikBirimKapsamAçıklama
cpu_pct%sunucuTüm çekirdeklerde CPU meşguliyeti
cpu_iowait_pct%sunucuG/Ç beklemesinde geçen CPU zamanı
cpu_steal_pct%sunucuHipervizörün çaldığı CPU zamanı
mem_used_pct%sunucuGeri kazanılabilir önbellek hariç kullanılan bellek
swap_used_pct%sunucuKullanılan swap
load1, load5, load15sunucuYük ortalamaları
load1_per_coresunucu1 dakikalık yükün çekirdek sayısına bölümü
disk_used_pct%bağlama noktasıDosya sistemi doluluğu
disk_inodes_used_pct%bağlama noktasıKullanılan inode oranı
disk_util_pct%aygıtBlok aygıtı kullanım oranı
net_rx_bytesB/snarayüzSaniyede alınan bayt
net_tx_bytesB/snarayüzSaniyede gönderilen bayt
net_errors1/snarayüzSaniyedeki alma ve gönderme hataları
tcp_establishedsunucuKurulu TCP bağlantıları
process_countsunucuSüreç sayısı
failed_unitssunucuBaşarısız systemd birimleri veya çökmüş OpenRC servisleri
pending_updatessunucuBekleyen paket güncellemeleri
pending_security_updatessunucuBekleyen güvenlik güncellemeleri
reboot_requiredsunucuYeniden başlatma gerekiyorsa 1
ssh_failed_logins_1hsunucuSon bir saatteki başarısız SSH girişleri
uptime_secssnsunucuAçılıştan bu yana geçen saniye
clock_skew_secssnsunucuSunucu saati ile helmsight saati arasındaki fark
containers_not_runningsunucuVar olan ama çalışmayan konteynerler

[[notify]]

AnahtarGeçerli olduğuAçıklama
idhepsiBenzersiz
typehepsiwebhook, slack veya email
min_severityhepsiVarsayılan warning
hosts, groups, tagshepsiYalnızca bu sunucuların alarmları (sertifikalar gibi sunucuya bağlı olmayan alarmlar kapsamsız kanallara gider)
urlwebhook, slackhttps:// adresi (düz http yalnızca localhost için)
headerswebhookEk HTTP başlıkları; değerler gizli değer başvurusu olabilir
smtp_host, smtp_portemail
smtp_securityemailstarttls (varsayılan), tls veya localhost’taki bir aktarıcı için none
smtp_username, smtp_passwordemail
from, toemailGönderen ve alıcılar

Bildirimler bir alarm tetiklendiğinde, çözüldüğünde (tetiklenme bildirimi gönderilmişse) ve hatırlatma olarak gönderilir. Susturulmuş alarmlar kaydedilir ama bildirilmez. Başarısız teslimatlar üç kez yeniden denenir ve alarmla birlikte listelenir. API’den deneme gönderin: POST /api/v1/notify/<id>/test.

Webhook gövdesi:

{
  "version": 1,
  "source": "helmsight",
  "status": "firing",
  "alert": {
    "id": 42,
    "rule": "disk-full",
    "host": "web-1",
    "instance": "/var",
    "severity": "critical",
    "summary": "disk_used_pct on /var is 93.1% (> 90.0%)",
    "value": 93.1,
    "started_at": "2026-09-30T16:56:12Z",
    "resolved_at": null,
    "acknowledged_by": null
  },
  "url": "https://monitor.example.com/alerts?id=42"
}

status değeri firing, resolved, reminder veya test olur.

[[certs]]

AnahtarVarsayılanAçıklama
endpointzorunlusunucu:port
server_nameendpoint’teki sunucuSNI adı ve doğrulanacak ad
interval"6h"

Sertifika doğrulanmasa bile okunur; güven sorunları bağlantı hatalarından ayrı gösterilir. Denetim helmsight sunucusundan yapılır; yani yalnızca helmsight’ın erişebildiği uç noktalar denetlenebilir.

[[actions]]

AnahtarVarsayılanAçıklama
idzorunluBenzersiz
labelzorunluDüğme metni
description""Arayüzde gösterilir
commandzorunluTam ve tek satırlık komut; yetki gerektiren komutlar sudo -n ile başlamalıdır
hosts, groups, tagszorunluEylemin sunulduğu sunucular; en az bir girdi
role"operator"operator veya admin
timeout"60s"1 saniye ile 1 saat arası

[prometheus]

AnahtarVarsayılanAçıklama
enabledfalse/metrics uç noktasını açar
tokenetkinse zorunluTaşıyıcı belirteç (bearer token)
scrape_configs:
  - job_name: helmsight
    scheme: https
    authorization:
      credentials_file: /etc/prometheus/helmsight.token
    static_configs:
      - targets: ["monitor.example.com"]

Sunulan metrikler helmsight_ önekini taşır: host_up, host_alerts_firing, cpu_percent{mode}, memory_*_bytes, load1/5/15, filesystem_{size,used,avail}_bytes{mount}, disk_{read,written}_bytes_per_second{device}, network_{receive,transmit}_bytes_per_second{interface}, tcp_connections{state}, pending_updates, pending_security_updates, reboot_required ve daha fazlası; hepsi host etiketiyle.

Komut satırı

KomutAçıklama
serve [--local] [--listen ADRES]Sunucuyu çalıştırır. --local yalnızca bu makineyi /proc okuyarak izler (SSH ve yapılandırma gerekmez).
init [--force] [--non-interactive] [seçenekler]Yapılandırma dosyasını, veri dizinini, anahtar dosyasını ve ilk yöneticiyi oluşturur; seçenek olarak verilmeyen değerleri sorar (--listen, --public-url, --ssh-user, --ssh-key, --generate-key, --admin, --password-stdin)
user add <ad> [--role viewer|operator|admin] [--password-stdin]Yerel kullanıcı oluşturur
user remove <ad>Kullanıcıyı siler (son yönetici silinemez)
user reset-password <ad> [--password-stdin] [--reset-totp]Yeni parola belirler ve kullanıcının oturumlarını sonlandırır
user listKullanıcıları listeler
hosts test [--trust] [adlar...]Sunuculara bağlanıp durumlarını bildirir; --trust bilinmeyen sunucu anahtarlarını etkileşimli olarak onaylatır
hosts bootstrap [--from ADRES] [--user KULLANICI] [--key YOL] [--no-journal]Bir sunucuda izleme hesabını oluşturan betiği yazdırır, ör. helmsight hosts bootstrap --from 10.0.0.5 | ssh root@web-1 sh
config checkYapılandırmayı doğrular ve başvurulan gizli değerlerin var olduğunu denetler
secret set <ad> [--stdin] / secret list / secret delete <ad>Şifreli gizli değerleri yönetir
audit verifyDenetim kaydının özet zincirini doğrular

Genel seçenekler: --config <yol>, --data-dir <dizin> (server.data_dir değerini geçersiz kılar; yapılandırma dosyası olmadan komutlar yerel kipin varsayılanı olan ~/.local/share/helmsight dizinini, root için /var/lib/helmsight dizinini kullanır), --log-format text|json.

Hiç kullanıcı yokken serve, ilk yöneticiyi tarayıcıda oluşturmak için tek kullanımlık bir kurulum bağlantısı (/setup#token=...) yazdırır.

Ortam değişkenleri

DeğişkenAçıklama
HELMSIGHT_CONFIGYapılandırma dosyasının yolu
HELMSIGHT_DATA_DIR--data-dir ile aynı
HELMSIGHT_LOGGünlük süzgeci, ör. info, debug, info,server=debug
SSH_AUTH_SOCKssh.use_agent = true olduğunda kullanılan ssh-agent soketi

HTTP API

Web arayüzü, /api/v1 altındaki sürümlü JSON API’nin aynısını kullanır. OpenAPI belgesi /api/v1/openapi.json adresinde sunulur. Kimlik doğrulama için POST /api/v1/auth/login ile alınan oturum çerezini kullanın; durum değiştiren istekler GET /api/v1/auth/me yanıtında dönen X-CSRF-Token başlığını gerektirir. Canlı güncellemeler /api/v1/events adresinde sunucu gönderimli olaylar olarak sunulur. Duvar ekranları /api/v1/display/state adresini Authorization: Bearer <belirteç> başlığıyla çağırır. /healthz kimlik doğrulama olmadan ok döndürür.