Mimari Özeti
- Sunucu: Rust HTTP hizmeti; etkinlik toplamalarını alır, ClickHouse’a yazar ve ilişkisel durumu PostgreSQL’de tutar.
- Pano: Next.js web uygulaması; sunucu API’si aracılığıyla okur ve yazar.
- agenteye-collector: sunucu ana bilgisayarında değil, agent makinelerinde dağıtılır.
- Postgres 15+: GEREKLI. (14’ten çok kiracılı sürümde yükseltildi; org-üyelik şeması
ON DELETE SET NULLyabancı anahtarını kullanan bir sütun listesi kullanır ve bu Postgres 15+ gerektirir. Bu sürümü dağıtmadan önce Postgres’i yükseltin.) OLTP durumunu saklar:api_keys,users,sessions,evaluation_jobs(sıra),dashboards,saved_queries,otp_codesve çok kiracılı tablolarorgs,org_memberships,org_settings. - ClickHouse 24+: GEREKLI. Her alınan etkinlik için analitik deposu. Motor:
ReplacingMergeTree, aya göre bölümlendirilmiş,(session_id, ts, dedup_key)ile sıralanmış. SunucuCLICKHOUSE_URLaracılığıyla bağlanır; paketlenmişdeploy/base/clickhouse/performans ayarlı tek düğüm yapılandırması içerir. Çok kiracılı gereksinim: paketlenmiş yapılandırma SQL erişim yönetimini etkinleştirir veusers_without_row_policies_can_read_rows=falseayarını yapar, böylece sunucu kuruluş başına bir salt okunur ClickHouse kullanıcısı ve satır ilkesi oluşturabilir (SQL editörü ve AI ajanı için motor tarafından zorlanmış izolasyon sınırı). Kendi ClickHouse yapılandırmanızı sağlarsanız bu ayarları aktarın (bkz.deploy/base/clickhouse/configmap.yaml). - Redis 7+: isteğe bağlı paylaşılan önbellek + hız sınırı arka ucu. Sunucu ve pano her ikisi de
REDIS_URLaracılığıyla bağlanır. Mevcut değilse, her ikisi de Postgres’e yapılan yollarla incelikle düşer. Aşağıda Redis (isteğe bağlı önbellek) bölümüne bakın.
Sunucu
Görüntüyü çekin
Mevcut yapılarbeta-latestaltında yayımlanır;latestyalnızca kararlı sürümlere atanır. Üretim için belirli bir:v<version>etiketine sabitle; bkz. Kullanılabilir Resim Etiketleri.
Ortam değişkenleri
| Değişken | Gerekli | Varsayılan | Açıklama |
|---|---|---|---|
DATABASE_URL | Evet | yok | Postgres DSN. Şema postgres:// ile standart libpq bağlantı dizesi biçimi. ?sslmode=require ve diğer libpq parametrelerini destekler. Parola /, + veya = içeremez; URL-safe parolalar oluşturmak için openssl rand -hex kullanın. |
ADMIN_KEY | Hayır | yok | Önyükleme yöneticisi API anahtarı. Her başlangıçta tüm izinlerle güncelleştirilir. Değeri değiştirerek ve yeniden başlatarak döndürün. |
LISTEN_ADDR | Hayır | 0.0.0.0:8080 | Bağlanacak TCP adresi |
MAX_BODY_BYTES | Hayır | 134217728 (128 MB) | Maksimum istek gövde boyutu |
ADMIN_EMAIL | Hayır | yok | Önyükleme yöneticisi kullanıcı e-postası. Her başlangıçta tüm izinlerle güncelleştirilir ve korumalı olarak işaretlenir: pano/API aracılığıyla devre dışı bırakılamaz veya izinleri değiştirilemez. Önyükleme yöneticisini döndürmek için ADMIN_EMAIL değiştirin ve yeniden başlatın; yeni e-posta korumalı olarak güncelleştirilir ve önceki e-posta el ile veritabanından temizleninceye kadar korumayı tutar. |
ALLOWED_EMAILS | Hayır | yok (hepsi engellenir) | Kullanıcı oluşturma ve oturum açma için izin verilen e-postaların virgülle ayrılmış listesi. Tam adresler (user@example.com) ve alan adı joker karakterleri (*@example.com) destekler. Ayarlanmamışsa, hiçbir kullanıcı oluşturulamaz veya oturum açamaz. İlk önyükleme tohumlandırması: varsayılan org’un izin listesini ilk önyüklemede tohurnlanır; bundan sonra her org’un /<org>/settings sayfası gerçeği kaynağıdır ve bu ortam değişkenini değiştirmek etkisi olmaz. |
SMTP_HOST | Hayır | yok | OTP e-postaları göndermek için SMTP sunucusu ana bilgisayar adı. Ayarlanmamışsa, OTP kodları bunun yerine stdout’a kaydedilir. |
SMTP_PORT | Hayır | 587 | SMTP sunucusu portu |
SMTP_USERNAME | Hayır | yok | SMTP kimlik doğrulaması kullanıcı adı |
SMTP_PASSWORD | Hayır | yok | SMTP kimlik doğrulaması parolası |
SMTP_FROM | Hayır | yok | OTP e-postaları için gönderen e-posta adresi |
SMTP_TLS | Hayır | STARTTLS | STARTTLS açıkça kapatmadığınız sürece kullanılır: false veya 0 düz metin gönderir (TLS yok); diğer herhangi bir değer — ayarlanmamış da dahil olmak üzere — STARTTLS’i etkinleştirir. |
DASHBOARD_URL | Hayır | yerleşik varsayılan | OTP-e-posta sihirli bağlantısı ve uyarı bildirimlerindeki olay sihirli bağlantıları oluşturmak için kullanılan pano kaynağı. Ayarlanmamışsa yerleşik varsayılana geri düşer (ve yalnızca OTP için panosundan türetilen istek kökenine ilk olarak geri düşer). Bölünmüş alan kurulumları için ayarlayın, böylece hem e-posta hem de Slack/olay bağlantıları panonuza işaret eder. E-posta sihirli bağlantı URL’si bölümüne bakın; çoğu operatör bunu ayarlamaya gerek duymaz. |
SESSION_TTL_SECS | Hayır | 86400 (24 s) | Pano oturumu süresi saniye cinsinden. İlk önyükleme tohumlandırması: ilk dağıtımdan sonra /<org>/settings aracılığıyla org başına düzenleyin. |
OTP_TTL_SECS | Hayır | 600 (10 dak) | OTP kodu geçerlilik süresi saniye cinsinden. İlk önyükleme tohumlandırması: ilk dağıtımdan sonra /<org>/settings aracılığıyla org başına düzenleyin. |
REDIS_URL | Hayır | yok | İsteğe bağlı paylaşılan önbellek + hız sınırı arka ucu, örn. redis://redis:6379/0. Ayarlandığında sunucu kimliği doğrulanmış API anahtarı aramaları, panonun /models toplamsı, oturumlar listesi ve ortam listesi grubunu önbelleğe alır; ayrıca OTP istek hız sınırlamasını Postgres COUNT’tan Redis INCR’ye taşır. Ayarlanmamışsa veya ulaşılamıyorsa, sunucu önbellek olmadan çalışır (OTP sınırı Postgres’e geri düşer, her diğer önbellek çağrısı gerçeği kaynağından düşer). Aşağıda Redis (isteğe bağlı önbellek) bölümüne bakın. |
CLICKHOUSE_URL | Evet | yok | ClickHouse örneğinin temel URL’si, örn. http://clickhouse:8123. Sunucu bu veritabanına etkinlik şemasını her başlangıçta uygular ve ClickHouse’a ulaşamıyorsa önyüklemeden kaçınır. Aşağıda ClickHouse (gerekli analitik deposu) bölümüne bakın. |
CLICKHOUSE_DATABASE | Hayır | agenteye | ClickHouse veritabanı (şema) adı. Sunucu mevcut değilse başlangıçta oluşturur. |
ORG_CH_SECRET | Hayır (tek kiracılı) / Evet (çok org) | geliştirme varsayılanı | Her kuruluşun kiracı başına ClickHouse parolasının türetildiği HMAC anahtarı. SQL editörü ve AI ajanın run_query kuruluşun kendi salt okunur ClickHouse kullanıcısı olarak çalışır ve satır ilkesi motorun içinde kiracı izolasyonunu zorlar. Tek kiracılı dağıtımlar yerleşik geliştirme varsayılanı iyi önyüklenir; ikinci bir org sağlamadan önce güçlü, kararlı bir değer ayarlaMALISINIZ çünkü agenteye-orgctl org create CLI yerleşik geliştirme varsayılanında çalışmayı reddeder. Döndürmek her org’un ClickHouse kullanıcısını yetime bırakır ta ki sonraki başlangıç bunları yeniden sağlayıncaya kadar (önyükleme süresi uzlaştırması bunu otomatik olarak iyileştirir). Gizli tutun ve çoğaltmalar arasında değiştirilmeyecek olarak saklayın. Org sağlaması kendisinin operatörü; aşağıda Kuruluşlar (çok kiracılılık) bölümüne bakın. |
DEFAULT_ORG_NAME | Hayır | Default | Yerleşik varsayılan org için tohumlandırılan görünen ad. İlk önyükleme tohumlandırması, ve yalnızca org hala yeni geçiş genel kimliğini taşırken, başlangıçta uygulanır, sonra yok sayılır. Org’u yeniden adlandırdığınızda (agenteye-orgctl org rename) yeniden adlandırma yetkilidir ve bu ortam değişkeninin başka etkisi yoktur. |
DEFAULT_ORG_SLUG | Hayır | default | Yerleşik varsayılan org için URL slugu, pano yolunda yaşadığı (/<slug>/…). DEFAULT_ORG_NAME ile aynı ilk önyükleme yalnızca / ilkel anlamıdır. default tuttuğu sürece geçersiz bir değer yok sayılır. Tek kiracılı kurulumun /default yerine örn. /acme olarak sunulmasını sağlar, post-dağıtım CLI adımı olmadan. |
RUST_LOG | Hayır | info | Günlük ayrıntı düzeyi (debug, warn, error, agenteye_server=trace) |
EVALUATOR_ENDPOINT | Hayır | yok | Değerlendirici hizmetinizin temel URL’si (örn. http://evaluator:9000). Ayarlanmadığında tüm değerlendirme işlem hattı no-op’dir; hiçbir kuyruk satırı yazılmaz, işçi çalışmaz. Bkz. Değerlendirme Paketi. |
EVALUATOR_TOKEN | Hayır | yok | Değerlendirici olarak Authorization: Bearer <token> gönderilir. Değerlendirici hizmetinin yapılandırıldığı aynı değere eşit OLMALIDIR. İsteğe bağlı yalnızca değerlendiriciniz belirteç olmadan yapılandırılmışsa. |
EVALUATOR_WORKERS | Hayır | 2 | Eşzamanlılık: sunucu örneği başına değerlendirmeler gönderen işçi görevlerinin sayısı. Yatay olarak ölçeklendirilmiş birden fazla sunucu arasında çalıştırmak güvenlidir. |
EVALUATOR_CLAIM_BATCH | Hayır | 4 | Tek işçinin bir tik başına talep ettiği maksimum değerlendirme sayısı. Toplu işler eşzamanlı olarak gönderilir, bu nedenle değerlendirici uç noktası üzerinde toplam eşzamanlılık EVALUATOR_WORKERS × EVALUATOR_CLAIM_BATCH olur. |
EVALUATOR_POLL_IDLE_SECS | Hayır | 2 | İşçi hiçbir şey gelmiş olduğunda gönderim denemeleri arasında uyuyacağı süre. |
EVALUATOR_POLLING_INTERVAL_SECS | Hayır | 10 | GET /evaluate/{id} yoklaması için son yedek kadansı (saniye), değerlendirici yanı başına next_poll_secs döndürmediğinde ve GET /config adresinden default_poll_interval_secs bildirmediğinde. |
EVALUATOR_REQUEST_TIMEOUT_MS | Hayır | 30000 | Değerlendirici karşısında HTTP istek başına zaman aşımı (milisaniye). |
EVALUATOR_MAX_ATTEMPTS | Hayır | 5 | Bu kadar başarısız denemeden sonra, bir değerlendirme terminal error (veya başarısızlıklar istek zaman aşımlarıysa timeout) olarak kaydedilir. |
EVALUATOR_CONFIG_REFRESH_SECS | Hayır | 300 (5 dak) | Sunucu değerlendirici’den GET /config öğesini yeniden getirir. |
EVALUATOR_MAX_POLL_DURATION_SECS | Hayır | 3600 (1 saat) | Bir oturumun yoklama sırasında kalabileceği maksimum duvar saati süresi, AgentEye bunu timeout olarak sonlandırmadan önce. Sonsuza kadar pending döndüren bir değerlendiriciyi korur. |
ALERT_WORKERS | Hayır | 1 | Eşzamanlılık: sunucu örneği başına uyarı kurallarını değerlendiren işçi görevlerinin sayısı. Bkz. Uyarılar. |
ALERT_CLAIM_BATCH | Hayır | 16 | Tek işçinin bir tik başına talep ettiği maksimum uyarı sayısı. |
ALERT_POLL_IDLE_SECS | Hayır | 5 | Kuyruk boşken uyarılar işçisinin uyuması gereken süre. |
ALERT_REQUEST_TIMEOUT_MS | Hayır | 15000 | Tetikleyici değerlendirmesi başına zaman aşımı (ClickHouse sorguları + giden kanal HTTP). |
ALERT_MAX_ATTEMPTS | Hayır | 5 | Ardışık geçici başarısızlıklar, bir uyarı üstel geri alma yerine normal kadansında yeniden zamanlanıncaya kadar. |
AUDIT_WORKERS | Hayır | 1 | Eşzamanlılık: sunucu örneği başına denetimleri yürüten işçi görevlerinin sayısı. Bkz. Denetimler. |
AUDIT_CLAIM_BATCH | Hayır | 1 | Tek işçinin bir tik başına talep ettiği maksimum yürürlükte denetim sayısı. Ajansal bir araştırma tek uzun bir döngüdür, bu nedenle varsayılan 1’dir. |
AUDIT_POLL_IDLE_SECS | Hayır | 30 | Hiçbir denetim yürürlükte olmadığında denetim işçisinin uyuması gereken süre. |
AUDIT_REQUEST_TIMEOUT_MS | Hayır | 30000 | ClickHouse karşısında ilke sorgusu başına zaman aşımı (milisaniye). |
AUDIT_LLM_TIMEOUT_MS | Hayır | 1440000 | AI asistan hizmetine ajansal araştırma çağrısının zaman aşımı. Tam bir ajan döngüsü dakikalar çalışır; bunu sunucunun bırakılmadan önce ajan kısmi bulgularını döndürmesi için ajanın kendi AGENTEYE_AUDIT_TIMEOUT_MS değerinin ÜZERİNDE tutun. |
AUDIT_MAX_ATTEMPTS | Hayır | 5 | Ardışık geçici başarısızlıklar, bir denetim üstel geri alma yerine normal kadansında yeniden zamanlanıncaya kadar. |
AGENTEYE_AGENT_URL / AGENTEYE_AGENT_TOKEN | Hayır | — | Denetimin ajansal araştırması AI asistan agent hizmetini çağırır, asistan ile aynı bağlantıyı yeniden kullanarak — bu nedenle bunları ikisini sunucuda da ayarlayın (paketlenmiş manifestler/compose yapar). Her ikisi ayarlanmış ⇒ denetimler AI araştırmasını çalıştırır; her ikisi ayarlanmamış ⇒ denetimler yalnızca ilke çalıştırır (belirlenimci SQL ilkesi geçişi yine de çalışır), per-denetim llm_enabled bayrağından bağımsız olarak. Ajanın da bir LLM yapılandırması olmalıdır — bkz. assistant.md. |
AGENTEYE_AUDIT_* önekinde ve hepsi isteğe bağlı:
| Değişken | Varsayılan | Anlamı |
|---|---|---|
AGENTEYE_AUDIT_MAX_STEPS | 200 | Araştırma başına maksimum ajan dönüşleri. |
AGENTEYE_AUDIT_TIMEOUT_MS | 1200000 | Bir araştırma için duvar saati (20 dak). Sunucunun AUDIT_LLM_TIMEOUT_MS değerinin altında kalmalıdır. |
AGENTEYE_AUDIT_MAX_CONCURRENCY | 1 | Ajan başına pod başına eşzamanlı araştırmalar (sohbet asistan bütçesinden ayrı). |
AGENTEYE_AUDIT_SANDBOX_TIMEOUT_MS / _MEM_MB / _CPU_SECS / _OUTPUT_MAX_BYTES / _SCRIPT_MAX_BYTES | 20000 / 768 / 10 / 64000 / 64000 | Bubblewrap sanal alanı için komut başına sınırlar. |
clone() bayraklarına izin vermelidir — seccompProfile: Unconfined ayarlayın (k8s) veya security_opt: [seccomp:unconfined] (compose) ajan’da. Düğüm çekirdeğinin ayrıcalıklı olmayan kullanıcı ad alanlarını devre dışı bıraktığı durumlarda (örn. bazı GKE COS görüntüleri), sanal alan önyükleme başarısız olur ve denetim otomatik olarak yalnızca SQL’e düşer — hata yok, ajan’ın /health üzerinde yalnızca sandbox_available: false. |
Çalıştırma
OrtamdaDATABASE_URL ayarlayın, ardından konteynera geçirin:
Sağlık kontrolü
/health ve hazırlık / yük dengeleyici yoklamaları için /ready kullanın. /ready sunucunun olmadan hizmet veremeyeceği sert bağımlılıkları kontrol eder (Postgres + ClickHouse), bu nedenle çalışan ancak veritabanına ulaşamayan bir sunucu döndürülmesinin dışında tutulur ve NotReady olarak gösterilir; Redis raporlanır ancak asla hazırlığı başarısız yapmaz. Paketlenmiş Kubernetes manifestlerinde hazırlık yoklaması zaten /ready adresini işaret eder ve canlılık /health üzerinde kalır. Tam resim, Kubernetes-native pod-başarısızlık uyarılarını Slack’e dahil etmek için bkz. enterprise-docs/health-monitoring.md.
E-posta sihirli bağlantı URL’si
OTP oturum açma e-postaları tek dokunuşla panoyu aç düğmesi içerir. Tıklamak kullanıcıyı/login?token=<code>&email=<address> adresine indirir; pano bu çifti bir oturumla değiştirir ve hiçbir manuel kod yeniden girişi olmadan uygulamaya yönlendirir. Sunucu, bağlantı oluşturmak için kullanılan pano kökenini üç katmanda çözer:
X-AgentEye-Dashboard-Urlbaşlığı: panonun kendi genel kaynağından/api/auth/otp/requestproxy tarafından otomatik olarak ayarlayır. Aynı kaynak dağıtımında (sunucu ve pano bir ön uç ardında bir ana bilgisayarı paylaşır, proxy başlıklarını iletir), hiçbir yapılandırma gerekmez.DASHBOARD_URLortam değişkeni: panonuz sunucunun OTP istek uç noktasının gördüğü orijinin farklı bir kaynağında erişilebilirse (bölünmüşapi.example.com/app.example.com), veya ön ucunuz genel ana bilgisayarı pano pod’una yaymıyorsa (bu nedenlerequest.nextUrl.originaksi takdirde0.0.0.0:3000gibi joker bir bağlamaya çözecektir) ayarlayın. Örnek:DASHBOARD_URL=https://app.example.com.- Varsayılan:
https://app.befailproof.ai, yalnızca yukarıdaki her ikisi yoksa kullanılır.
https://* ve geri döngü (http://localhost*, http://127.0.0.1*) kaynakları kabul edilir ve joker bağlama adresleri (0.0.0.0, [::]) https:// şemasıyla bile reddedilir. Başka bir şey katman 2’ye düşer.
Çalışan bir kümede tek satırlı olarak ayarlayın; dosya yok, kustomize yeniden derlemesi yok:
kustomize build | kubectl apply ön ek aşılıya karşı, ön ekinizdeki server-env.yaml yama aynı ortam değişkenini eklemediniz sürece bunu silecektir.
Pano
Görüntüyü çekin
Ortam değişkenleri
| Değişken | Gerekli | Varsayılan | Açıklama |
|---|---|---|---|
AGENTEYE_SERVER_URL | Evet | yok | Sunucunun temel URL’si, örn. http://localhost:8080 |
AGENTEYE_API_KEY | Evet | yok | Panonun sunucuda kimlik doğrulaması yapmak için kullandığı API anahtarı. Tüm izinleri gerektirir (yönetici anahtarı önerilir). |
AE_LOG_LEVEL | Hayır | info | Sunucu tarafı günlük ayrıntı düzeyi: debug, info, warn, error. Sorunları tanılarken yukarı akış istek/yanıt satırlarını ve oturum doğrulaması izlerini görmek için debug ayarlayın. |
AE_LOG_JSON | Hayır | otomatik | 1 JSON-per-satır çıktısını zorlar; 0 insan tarafından okunabilir çıktıyı zorlar. Ayarlanmadığında, NODE_ENV=production ise JSON otomatik olarak etkinleştirilir. Üretimde JSON önerilir, böylece günlükler jq veya bir günlük toplayıcı ile temiz biçimde ayrıştırılır. |
AE_ANALYTICS_DISABLED | Hayır | yok | Panonun anonim ürün kullanımı telemetrisini devre dışı bırakmak için 1/true ayarlayın. Aşağıda Telemetri & Gizlilik bölümüne bakın. |
REDIS_URL | Hayır | yok | İsteğe bağlı paylaşılan önbellek arka ucu, örn. redis://redis:6379/0. Ayarlandığında pano çoğaltmalar arasında validateSession() sonuçlarını önbelleğe alır ve gecikme toplama / ortam listesi proxy rotaları için Next.js getirme önbelleğini paylaşır. Edge-side OTP istek ve doğrulama hız sınırları mevcut olduğunda Redis’i kullanır (Redis ulaşılamıyorsa açılır; sunucu tarafı sınırı güvenlik yedeklenidir). Aşağıda Redis (isteğe bağlı önbellek) bölümüne bakın. |
AGENTEYE_AGENT_URL | Hayır | yok | İsteğe bağlı AI-asistan agent hizmetinin temel URL’si, örn. http://agent:9100. Asistanı tamamen gizlemek için ayarlanmış halde bırakın: pano asistan balonu görünmez. Bkz. enterprise-docs/assistant.md. |
AGENTEYE_AGENT_TOKEN | Hayır | yok | Panonun agent hizmetine sunduğu paylaşılan gizli. Ajan’da yapılandırılan AGENTEYE_AGENT_TOKEN ile eşleşmeli. Bkz. enterprise-docs/assistant.md. |
Çalıştırma
Telemetri & Gizlilik
Pano, anonim ürün kullanımı analitikleri Exosphere’in analitik hizmetine (PostHog) gönderir: hangi pano sayfalarının görüntülendiği ve API anahtarı oluşturma veya oturumu yeniden değerlendirme gibi bir avuç UI eylemi. Bu kullanım sinyali hangi özelliklerin önceliklendirildiğini bildiridir.- Agent, oturum veya etkinlik verileri hiçbir zaman altyapınızdan ayrılmaz. Yalnızca pano UI kullanımı raporlanır. Sayfa URL’leri göndermeden önce tanımlayıcılardan çıkarılır ve operatörler asla e-posta tarafından değil, yalnızca opak bir iç kimliği tarafından tanımlanır.
- Telemetri varsayılan olarak etkindir. Tamamen kapatmak için panonun konteynerinde
AE_ANALYTICS_DISABLED=1ayarlayın ve yeniden başlatın. - Analitikler panonun kendi
/ingestyoluna gönderilir, pano PostHog’a ters proxy yapar (https://us.i.posthog.com). İstekleri birinci taraf olarak tutmak, tarayıcı reklam engelleyicilerin bunları bırakmaması anlamına gelir. Pano konteyneri PostHog’a giden erişime ihtiyaç duyar; engellenmişse telemetri sessizce hiçbir şey yapmaz ve pano etkilenmez.
AI Asistanı (isteğe bağlı)
Pano içi AI asistanı, ekibinizin Agent veri hakkında düz dilde soru sormasına (oturumları özetleme,/queries editörü için SQL taslakları ve kaydedilmiş sorguları pano kutucuklarına dönüştürme) panodan ayrılmadan izin verir. Bağımsız bir dahili agent konteynerinde (Claude Agent SDK’da) çalışır, yalnızca pano ulaşabilir ve bir LLM uç noktası yapılandırana kadar devre dışı kalır.
Etkinleştirmek için agent hizmetinde bir LLM bağlantısı (Portkey aracılığıyla PORTKEY_API_KEY + model-katalog sonu AGENTEYE_AGENT_MODEL=@<slug>/<model>, doğrudan Anthropic aracılığıyla ANTHROPIC_API_KEY, başka bir ağ geçidi aracılığıyla ANTHROPIC_BASE_URL veya Bedrock/Vertex), ayrılmış bir veri anahtarı ve panola eşleşen paylaşılan AGENTEYE_AGENT_TOKEN ayarlayın. Pano kullanıcıları ek olarak agent:use izni gerektirir.
Asistanın veri anahtarı için elle hiçbir şey basılmaz: rastgele bir gizli seçin, agent üzerinde AGENTEYE_API_KEY olarak ve server üzerinde AGENT_API_KEY olarak ayarlayın ve sunucu başlangıçta bunu sabit bir izin kümesi ile tohurnlanır. Veri erişimi salt okunur (events:read, evaluations:read, dashboards:read, queries:read) ve ek olarak onay geçidi yazarlık kapsamları tutar (dashboards:write, queries:write, queries:run) böylece kullanıcının adına kaydedilmiş sorguları ve pano kutucuklarını taslaklandırabilir ve doğrulayabilir; tüm SQL yine de org’un salt okunur ClickHouse rolü aracılığıyla çalışır, bu nedenle bu asistanın hangi veri yazabileceğini yığar, ulaşabileceği verileri değil. Kapsamlar kodda sabitlenmiş ve yapılandırma tarafından genişletilemez. Bu anahtar korunur; API aracılığıyla devre dışı bırakılamaz veya yeniden oluşturulamaz, yalnızca değeri değiştirerek ve yeniden başlatarak döndürülebilir. Yönetici/pano anahtarını hiçbir zaman bu amaç için yeniden kullanmayın.
Tam kurulum, tam ortam değişkeni referansı, telemetri seçenekleri ve güvenlik modeli enterprise-docs/assistant.md içindedir.
ClickHouse (gerekli analitik deposu)
ClickHouse yüksek etkinlik birimlerinde panonuları duyarlı tutar ve/queries SQL editörü etkinlikleri, değerlendirmeleri ve oturumları tek mağazada birleştirmeyi sağlar. Bu, her alınan etkinlik, her terminal değerlendirme sonucu ve türetilmiş oturum başına toplamaların gerekli kanonik deposudur. PostgreSQL ilişkisel / değişebilir durum tablolarını tutar (api_keys, users, otp_codes, evaluation_jobs, dashboards, saved_queries); analitik yüzey ClickHouse’ta yaşar, böylece panonun açılmış işlemleri ve kendi SQL sorgularınız bunu yerel olarak tarayabilir ve birleştirebilir, veritabanları arası gidiş dönüş olmadan. Sunucu CLICKHOUSE_URL olmadan önyüklemeden kaçınır.
Şema
Üç ClickHouse nesnesi sunucu başlangıcında oluşturulur, tüm idempotenttir (CREATE IF NOT EXISTS):
agenteye.events:ReplacingMergeTree(ingested_at),toYYYYMM(ts)ile bölümlendirilmiş,(session_id, ts, dedup_key)ile sıralanmış. Yinelenen eklenmeler (toplayıcı yeniden denemeleri) birleştirme zamanında tek satıra çöker; sunucu her etkinlik için belirlenimci bir SHA-256dedup_keyhesaplar, böylece yeniden denenmeler güvenlidir.agenteye.evaluations:ReplacingMergeTree(ingested_at),toYYYYMM(finished_at)ile bölümlendirilmiş,(session_id, finished_at, dedup_key)ile sıralanmış. Her terminal değerlendirme sonucu için değerlendirici ardışık düzen tarafından bir kez yazılır.eventsile aynı dedup-anahtar modeli.agenteye.agent_sessions: fiziksel bir tablo değil,agenteye.eventsüzerindeki bir VIEW. Her sütun türetilmiş (started_at = min(ts),last_event_at = max(ts),ended_at = max(if event_type='agent_end', ts, NULL),event_count = count(), vb.). Etkinlik başına upsert yok ve ayrı backfill yok; görünüm otomatik olarakeventsiçinde ne varsa yansıtır.
analytics.evaluations / analytics.sessions başvuran kaydedilmiş sorgularla, sunucu ayrıca agenteye.* tablolarında görünümler içeren analytics ClickHouse veritabanını oluşturur; analytics.events, analytics.evaluations, analytics.agent_sessions, analytics.sessions hepsi doğru şekilde çözülür.
Yapılandırma
Paketlenmiş docker-compose vedeploy/base/clickhouse/ AgentEye iş yükü için ayarlanmış bir ClickHouse hizmeti içerir:
- 2 GiB istenen / 4 GiB limit bellek paketlenmiş temel ön ek (küçük POC/hazırlık düğümlerine sığmak için boyutlandırılmış); üretim müşterileri ön ek tekrar olmalıdır — önerilen alt sınır 2c / 4Gi istek, 6c / 8Gi sınırıdır.
max_server_memory_usage_to_ram_ratio=0.9 - 5 GiB mark önbellek + 8 GiB sıkıştırılmamış önbellek
background_pool_size=16,background_merges_mutations_concurrency_ratio=2- MergeTree:
parts_to_throw_insert=3000,parts_to_delay_insert=1500,non_replicated_deduplication_window=1000 local_io_method=auto(desteklenen çekirdeklerde io_uring)fsync_metadata=0: at-least-once alım + ReplacingMergeTree dedup nedeniyle kabul edilebilirquery_log30 günlük TTL etkinleştirilmiş;query_thread_logkaldırılmış (yüksek QPS’de pahalı)max_execution_time=30kullanıcı tarafı sorguları için- StatefulSet şablonunda 100 GiB PVC (müşteri ön ekleri üretim için hızlı SSD depolama sınıfına geçersiz kılmalıdır)
Yedeklemeler
Tam veri setin tek bir geri yüklenebilir arşivde her gece yakalanır, bu nedenle küme veya depolama kaybı kurtarılabilir. ClickHouse günlükagenteye-backup CronJob’u tarafından otomatik olarak yedeklenir, bu da bir geçişte hem PostgreSQL hem de ClickHouse’u döker. ClickHouse HTTP API’si üzerinden okunur: agenteye.events ve agenteye.evaluations ClickHouse-native biçiminde dökerlenmiştir (görünümler ve satır ilkeleri sunucu başlangıcında yeniden oluşturulur, böylece tablo verileri tam resimdir) ve Postgres dökümü ile nesne depolamaya yüklenen tek bir sıkıştırılmış arşive birleştirilmiş.
Hedef bucket ve bulut kimlik bilgileri ön ek başına yapılandırılır. Yükleme yapılandırması ve geri yükleme adımları için enterprise-docs/kubernetes-deployment.md Yedeklemeler bölümüne bakın.
Redis (isteğe bağlı önbellek)
Redis, sunucu ve pano tarafından kullanılan isteğe bağlı bir paylaşılan önbellek + hız sınırı arka ucu. Redis dağıtılırken veREDIS_URL her iki hizmette ayarlandığında:
- Sunucu kimliği doğrulanmış API anahtarı aramaları,
/events/environments+/evaluations/environmentslisteleri,/events/latency_aggregateaçılmış (panonun yokladığı en ağır sorgu),/sessionslistesi önbelleğe alır ve OTP istek hız sınırlamasını PostgresCOUNT(*)adresinden RedisINCR + EXPIREadresine değiştirir. - Pano
validateSession()sonuçlarını çoğaltmalar arasında önbelleğe alır, böylece tipik sayfa yükü sorunları olan 10-20 authed API çağrısı tüm bir yukarı akış oturumu kontrolü paylaşır. Ayrıca panonun kenarında OTP istek ve OTP doğrulama hız sınırı tutar.
Err döndürür ve çağıran gerçeği kaynağına geri düşer (sunucuda Postgres, panonun yukarı akış Rust sunucusu). OTP hız sınırı sunucuda Postgres COUNT(*) yoluna geri düşer (güvenlik özelliği korunur); panonun kenar OTP sınırı Redis ulaşılamıyorsa açılır, sunucu tarafı sınırı hala tutar. Redis kapalı olduğunda gecikmeyi düşürür, doğruluk değil.
Yapılandırma
docker-compose paket zaten Redis hizmetini veREDIS_URL=redis://redis:6379/0 sunucu ve panoyu içerir. Harici Redis kullanmak için REDIS_URL uç noktanız olarak ayarlayın ve compose dosyasından redis hizmetini kaldırın.
Bellek + kalıcılık
Paketlenmiş Redis görüntüsü--appendonly yes --appendfsync everysec --maxmemory 256mb --maxmemory-policy allkeys-lru ile çalışır. AOF kalıcılığı, önbelleğin kapsayıcı yeniden başlatmalarından kurtulması anlamına gelir; everysec doğru dayanıklılık/perf dengesidir çünkü son saniyelik önbellek yazmaları kaybı zararsızdır. LRU tahliye bellek büyümesini sınırlar.
Redis dağıtmamak için
- Tek örnek geliştirme/QA. Sunucuda işlem içi önbellekler tek başına çoğu per-çoğaltma avantajını teslim eder; Redis, tek örnek kurulumları gereken çapraz çoğaltma paylaşımını ekler.
- Bir hizmeti daha çalıştırmanın operasyonel maliyeti gecikme kazancından daha ağır olan hava geçitli kurulumlar.
Docker Compose (önerilen)
agenteye-enterprise/releases deposunda bir docker-compose.yml mevcuttur. Postgres, sunucusu ve panosu tek komutla getirtir.
.env aracılığıyla varsayılanları geçersiz kılın:
İşletimsel ayarlar
Ortam değişkenleri tarafından sabitlenmiş küçük bir operasyonel düğme seti artık panonun/<org>/settings sayfasından kuruluş başına düzenlenebilir; her org kendi yapılandırır. Değişiklikler saniyeler içinde etkili hale gelir, yeniden başlatma yok ve yeniden dağıtma yok.
| Ayar | Önyükleme ortam değişkeni | Ne denetler |
|---|---|---|
| İzin verilen oturum açmalar | ALLOWED_EMAILS | OTP almalarına izin verilen e-postalar (veya *@domain.com joker karakterleri) ve kullanıcı olarak eklenir |
| Varsayılan kullanıcı izinleri | DEFAULT_USER_PERMISSIONS | Bir yönetici + yeni kullanıcı açtığında önceden seçilen virgülle ayrılmış izin jetonları. Her jeton API anahtarı izinleri altında listelenen dizelerden biri olmalıdır. standard ön ayarına varsayılan: salt okunur erişim ve günlük gündüz eylem (değerlendirmeleri yeniden tetikleme, sorgular çalıştırma, olayları onaylama, asistanı kullanma). |
| Oturum yaşam süresi | SESSION_TTL_SECS | Pano oturum açması yeniden kimlik doğrulamadan önce ne kadar geçerli kalır. Pano yukarı akış oturumunu her 5 saniyede yeniden kontrol eder, bu nedenle /<org>/users üzerindeki izin güncellemesi etkilenen kullanıcının sonraki isteğinde, yeniden oturum açılmadan etkili olur. |
| Tek kullanımlık kod yaşam süresi | OTP_TTL_SECS | OTP / sihirli bağlantı ne kadar süreyle kullanılabilir kalır |
| Uyarı bildirim kanalları | ALERTS_ENABLED_CHANNELS | Uyarı göndericisinin kullanmasına izin verilen kanal türlerinin virgülle ayrılmış listesi: email, slack, webhook. Per-uyarı yapılandırması hala /<org>/alerts/<id> üzerinde yazılır, ancak göndericisi bu küme aracılığıyla her giden teslimi filtreler; burada devre dışı bırakılan bir kanal skipped_disabled denetim satırı ile kısa devreye girer. dashboard kanalı (yerel denetim ekleme) her zaman izin verilir. Üçünün tümü açılmış olarak varsayılan ayarlar. |
Önyükleme nasıl çalışır
Ayarlar kuruluş başınaorg_settings içinde depolanır. İlk önyüklemede, sunucu varsayılan org’un eksik satırlarını eşleşen ortam değişkeninden (veya ortam değişkeni ayarlanmadığında akla yatkın bir varsayılandan) tohurnlanır. Bundan sonra, depolanmış değer gerçeği kaynağı ve ortam değişkeni yok sayılır; ortam değişkenini daha sonraki yeniden başlatmada değiştirmek canlı org’un değerini etkilemez ve ek org’lar varsayılanlardan başlayıp kendi yapılandırır.
Bu anlamına gelir:
- Yeni bir dağıtım için, ortam değişkenlerini yukarıda gösterildiği gibi ayarlayın ve varsayılan org ilk önyüklemede onları okur.
-
Bir değeri daha sonra değiştirmek için panonuya giriş yapın ve
/<org>/settingsaltında düzenleyin. Değişiklik saniyeler içinde tüm sunucu çoğaltmaları arasında etkili olur; yeniden başlatma gerekmez. -
Bir başlangıç günlük satırı ne tohurnlandığını ve ne zaten var olduğunu kaydeder, böylece önyüklemenin etkili olduğunu doğrulayabilirsiniz:
Kuruluşlar arasında oturum açma anlambilimi
Oturum ve OTP, tek org’a değil küreseldir, bu nedenle iki kural oturum açma zamanında per-org ayarlarını uzlaştırır:- Oturum / OTP yaşam süresi: en katı (en kısa) yaşam süresi kullanıcının ait olduğu org’lar arasında kazanır.
- İzin verilen oturum açmalar: kapı VEYA’lar her org’un izin listesi kuruluş üyeliğiyle: bir kullanıcı herhangi bir org’un izin listesi e-postalarını kabul ederse OTP isteyebilir veya zaten herhangi bir org’un üyeleri.
İzinler
/<org>/settings sayfasına erişim iki izin tarafından kapılır:
settings:read: sayfayı görmek ve geçerli değerleri.settings:write: değişiklikleri kaydet.
ADMIN_EMAIL adresinde) otomatik olarak her diğer izinle birlikte her ikisini alır. Gerektiğinde diğer kullanıcılara /<org>/users adresinden verin.
Kuruluşlar (çok kiracılılık)
Tek bir dağıtım birden fazla izole kuruluş (kiracı) sunabilir; her veri satırı tam olarak bir org’a aittir ve izolasyon veritabanı motorunda uygulanır. Tek kiracılı kurulum buna gerek duymaz; tüm veriler yerleşikdefault org’da yaşar. (Bu org’a daha uygun bir ad ve URL sunu verebilirsiniz, böylece default yerine örn. /acme adresinde yaşar, ilk önyüklemeden önce DEFAULT_ORG_NAME / DEFAULT_ORG_SLUG ayarlayarak veya herhangi bir zamanda agenteye-orgctl org rename ile yeniden adlandırarak.)
Kiracı sağlaması yalnızca operatördür. Kuruluşlar ve üyelikleri agenteye-orgctl CLI ile oluşturulur ve yönetilir, bu sunucu görüntüsünün içinde gemi (agenteye-server yanında) ve mevcut sunucu pod içinde çalışır; ayrı pod/Job, HTTP API ve pano düğmesi yok. Sunucunun DATABASE_URL, CLICKHOUSE_URL ve ORG_CH_SECRET yeniden kullanır.
org create | list | rename | delete | purge ve member add | list | update | remove, yerleşik izin kümesi admin, standard ve read-only ile. Eklenen üyeler ilk pano girişinde OTP alır.
İkinci bir org oluşturmadan önce: güçlü, kararlı ORG_CH_SECRET ayarlayın (org create komutu yerleşik geliştirme varsayılanında çalışmayı reddeder) ve Postgres’in 15+ olmasını sağlayın. Değiştirilmemiş: per-org API anahtarları hala pano/API tarafından org üyeleri tarafından basılır; yalnızca org + üyesi yaşam döngüsü CLI’ye taşındı. Tam komut referansı ve çalışılan örnek: enterprise-docs/tenant-management.md.
Bağlam penceresi doldurma
Hermodel_response etkinliği bir bağlam dolgu hapı gösterir — o modelin bağlam penceresinin yüzdesi olarak giriş artı çıkış jetonları. Bantlar healthy (0–24%), watch (25–49%), compacting (50–74%) ve reset context (75–100%) olur. AgentEye yaygın model kimliklerini otomatik olarak çözer, bu nedenle hiçbir ilk yapılandırma gerekmez.
Bir kuruluşun gönderdiği her model Ayarlar → model bağlam pencereleri altında görünür. settings:write izni olan kullanıcılar pencereyi geçersiz kılabilir veya özel/proxy model ekleyebilir (0–1.000.000 jeton); 0 “bilinmiyor” anlamına gelir ve hapı bastırır. Değişiklikler yeni alınan etkinliklere uygulanır. settings:read izni olan kullanıcılar listeyi görüntüleyebilir.
Yeni etkinlikler yükseltmede anı alır. Ayrıca mevcut dağıtım için tarihsel etkinlikleri doldurmak için (ve per-model listeyi), bir kez çalıştırılan backfill çalıştırın — sunucu görüntüsünün içinde gemi (agenteye-orgctl gibi) ve mevcut sunucu pod’unda çalışır:
DATABASE_URL / CLICKHOUSE_URL / REDIS_URL yeniden kullanır. Model pencereleri düzenledikten sonra varolan etkinlikleri yeniden hesaplamak istiyorsanız yeniden çalıştırın.
Üretim Hususları
- Postgres: Yönetilen Postgres hizmetini veya düzenli yedeklemeleri olan ayrılmış bir örneği kullanın.
DATABASE_URLsslmode=requiredahil olmak üzere tüm standart libpq parametrelerini destekler, şifreli bağlantılar için. - TLS: Sunucu ve panoyu TLS’yi sonlandıran ters proxy’nin (nginx, Caddy, Traefik) ardına koyun.
- Güvenlik duvarı: Sunucu portu (varsayılan 8080) yalnızca toplayıcı makinelerinden ve pano ana bilgisayarından erişilebilir olmalıdır, genel İnternet’ten değil.
- Yönetici anahtarı:
ADMIN_KEYgüçlü rastgele gizli ayarlayın. Önyüklemeden sonra, yönetici anahtarını her yerde kullanmak yerine toplayıcılar ve pano için ayrılmış kapsamlı anahtarlar oluştu

