Last9
resmiGerçek zamanlı üretim bağlamını—loglar, metrikler ve izler—yerel ortamınıza sorunsuz bir şekilde taşıyarak kodu daha hızlı otomatik düzeltin.
Last9 MCP ile neler yapabilirsiniz?
- Üretim olaylarını araştırın — Asistanınızdan bir hizmete ait günlükleri, izleri, metrikleri, istisnaları ve tetiklenen uyarıları getirmesini isteyin; böylece neyin bozulduğunu teşhis edebilir.
- Değişiklikleri etkileriyle ilişkilendirin — Dağıtımları ve yapılandırma değişikliklerini kontrol edin, ardından bir değişikliğin gerilemeye yol açıp açmadığını görmek için hizmeti ve çağıranlarını değişiklik öncesi ve sonrası karşılaştırın.
- Prometheus metriklerini sorgulayın — Veri kaynağınızdaki herhangi bir metriği incelemek için PromQL aralık veya anlık sorguları çalıştırın ve etiket değerlerini listeleyin.
- Veritabanı performansını inceleyin — Veritabanlarını keşfedin, yavaş sorgu yürütmelerini bulun ve OTel span’lerinden sorgu kalıplarını ve sunucu tarafı metriklerini gözden geçirin.
- İzleri ve profilleri analiz edin — Kimliğe göre bir iz zaman çizelgesini alın, kohortlar arasındaki öznitelik sapmalarını sıralayın veya bir hizmet için alev grafiğini ve en çok çalışan işlevleri getirin.
- Uyarıları ve panoları yönetin — Uyarı kapsamını ve düzenini gözden geçirin, uyarı kuralları oluşturun veya yamalayın ve özel panoları listeleyin, doğrulayın ya da düzenleyin.
Dokümantasyon
Last9 MCP Server

Yapay zekâ aracınız üretimde neyin bozulduğunu bilmiyor. Bu, sorunu çözer.
Last9 MCP Server, Claude, Cursor, Windsurf ve MCP destekleyen diğer tüm yapay zekâ asistanlarını doğrudan üretim gözlemlenebilirlik verilerinize bağlar: günlükler, metrikler, izler, istisnalar, veritabanı sorguları, uyarılar ve dağıtımlar. Aracı tahmin yürütmeyi bırakır ve gerçek sinyalleri okumaya başlar.
30 saniyede başlayın (Hosted)
Yüklenecek ikili dosya yok. Yönetilecek token yok. Tek bir URL, tarayıcınızda OAuth, hepsi bu.
Last9 URL’nizde kuruluşunuzun kısa adını bulun: app.last9.io/<org_slug>/...
Claude Code
claude mcp add --transport http last9 https://app.last9.io/api/v4/organizations/<org_slug>/mcp
/mcp yazın, last9’ı seçin ve kimlik doğrulaması yapın. Hepsi bu.
Cursor
Settings > MCP > Add New MCP Server:
{
"mcpServers": {
"last9": {
"type": "http",
"url": "https://app.last9.io/api/v4/organizations/<org_slug>/mcp"
}
}
}
Connect’e tıklayın ve OAuth işlemini tamamlayın.
VS Code
v1.99+ gerekir. Komut Paleti’ni açın → MCP: Add Server, URL’yi yapıştırın ve kimlik doğrulaması yapın.
Ya da doğrudan settings.json içine ekleyin:
{
"mcp": {
"servers": {
"last9": {
"type": "http",
"url": "https://app.last9.io/api/v4/organizations/<org_slug>/mcp"
}
}
}
}
Windsurf
Settings > Cascade > Open MCP Marketplace > gear icon (mcp_config.json):
{
"mcpServers": {
"last9": {
"serverUrl": "https://app.last9.io/api/v4/organizations/<org_slug>/mcp"
}
}
}
Claude Web/Desktop
Settings > Connectors > Add custom connector. Adını last9 koyun, URL’yi yapıştırın ve kimlik doğrulaması yapın.
Claude kuruluşunuzda yönetici erişimi gerekir.
Self-Hosted (STDIO)
MCP istemciniz HTTP aktarımını desteklemiyorsa veya sunucuyu yerel olarak çalıştırmanız gerekiyorsa bunu kullanın.
Yükleme
Homebrew:
brew install last9/tap/last9-mcp
NPM:
Node.js 22.23.4+, 24.22.1+ veya 26.12.1+ gerekir: önceki sürümler, yükleyici ikili dosyayı indirirken güvenliği ihlal edilmiş eMudhra ara sertifikalarından TLS sertifikalarını kabul eder.
npm install -g @last9/mcp-server@latest
# or directly:
npx -y @last9/mcp-server@latest
İkili dosya sürümleri (Windows / manuel):
GitHub Releases sayfasından indirin:
| Platform | Arşiv |
|---|---|
| Windows (x64) | last9-mcp-server_Windows_x86_64.zip |
| Windows (ARM64) | last9-mcp-server_Windows_arm64.zip |
| Linux (x64) | last9-mcp-server_Linux_x86_64.tar.gz |
| Linux (ARM64) | last9-mcp-server_Linux_arm64.tar.gz |
| macOS (x64) | last9-mcp-server_Darwin_x86_64.tar.gz |
| macOS (ARM64) | last9-mcp-server_Darwin_arm64.tar.gz |
Refresh Token Alma
Token’ları yalnızca yöneticiler oluşturabilir.
- API Access sayfasına gidin
- Write izinleriyle Generate Token’a tıklayın
- Token’ı kopyalayın
İstemci Yapılandırması
Homebrew:
{
"mcpServers": {
"last9": {
"command": "/opt/homebrew/bin/last9-mcp",
"env": {
"LAST9_REFRESH_TOKEN": "<your_refresh_token>"
}
}
}
}
NPM:
{
"mcpServers": {
"last9": {
"command": "npx",
"args": ["-y", "@last9/mcp-server@latest"],
"env": {
"LAST9_REFRESH_TOKEN": "<your_refresh_token>"
}
}
}
}
Nereye yapıştırılır:
| İstemci | Konum |
|---|---|
| Claude Web/Desktop | Settings > Developer > Edit Config (claude_desktop_config.json) |
| Cursor | Settings > Cursor Settings > MCP > Add New Global MCP Server |
| Windsurf | Settings > Cascade > MCP Marketplace > gear icon (mcp_config.json) |
| VS Code | settings.json içinde { "mcp": { "servers": { ... } } } olarak sarın — ayrıntılar |
VS Code STDIO yapılandırması
{
"mcp": {
"servers": {
"last9": {
"type": "stdio",
"command": "/opt/homebrew/bin/last9-mcp",
"env": {
"LAST9_REFRESH_TOKEN": "<your_refresh_token>"
}
}
}
}
}
NPM için: "command": "npx" kullanın ve "args": ["-y", "@last9/mcp-server@latest"] ekleyin.
Windows
GitHub Releases sayfasından indirdikten sonra arşivi çıkarın ve tam yolu belirtin:
{
"mcpServers": {
"last9": {
"command": "C:\\Users\\<user>\\AppData\\Local\\Programs\\last9-mcp-server.exe",
"env": {
"LAST9_REFRESH_TOKEN": "<your_refresh_token>"
}
}
}
}
Windows’ta NPM yöntemi daha kolaydır; yol yönetimi gerekmez.
Ortam Değişkenleri
| Değişken | Varsayılan | Açıklama |
|---|---|---|
LAST9_REFRESH_TOKEN | (gerekli) | API Access sayfasından alınan refresh token |
LAST9_DATASOURCE | kuruluş varsayılanı | Veri kaynağı/küme adı — birden fazla Levitate kümeniz olduğunda kullanışlıdır |
LAST9_FAKE_NOW_ISO | (ayarlanmamış) | Yalnızca eval/replay işlemleri içindir; üretimde asla ayarlamayın. lookback_minutes gibi göreli aralıklar çözümlenirken geçerli zamanın yerine geçen RFC3339 anı (ör. 2026-01-02T15:04:05Z); böylece çalıştırmalar tekrarlanabilir olur. Geçersiz bir değer başlangıç hatasına yol açar. Zaman aşımları, önbellekler ve token süresinin dolması gerçek zamanı kullanmaya devam eder |
LAST9_API_HOST | app.last9.io | API ana bilgisayarını geçersiz kılar |
LAST9_TOOLSETS | tüm araçlar | Sunulacak araç kümelerini virgülle ayırarak belirtin (logs, traces, metrics, alerts, dashboards, profiles, grafana, investigate, all). Diğer adı: LAST9_MCP_TOOLSETS |
LAST9_MCP_READ_ONLY | false | Yalnızca salt okunur araçları sunmak için true ayarlayın; bkz. Salt okunur mod. Boole olmayan bir değer başlangıç hatasına yol açar. Diğer adı: LAST9_READ_ONLY |
LAST9_MCP_ALLOW_WRITE_TOOLS | — | Salt okunur modda sunulmaya devam edecek yazma araçlarını virgülle ayırarak belirtin. Diğer adı: LAST9_ALLOW_WRITE_TOOLS |
LAST9_MAX_GET_LOGS_ENTRIES | 5000 | Parçalı get_logs istekleri için en fazla girdi sayısı |
LAST9_USE_LOG_SEARCH_API | false | get_logs ve get_service_logs isteklerini istemci tarafında parçalamak yerine sunucu tarafında tek bir arama çağrısıyla yanıtlamak için true ayarlayın. Her çağrı 90 saniye sürer, ardından aralığı daraltma önerisi döndürür; bu süre içinde 502 veya 503 hatası bir kez yeniden denenir |
LAST9_DEBUG_CHUNKING | false | get_logs, get_service_logs, get_traces için parça planlama ayrıntılarını günlüğe kaydetmek üzere true ayarlayın |
LAST9_DISABLE_TELEMETRY | true | Dahili OTel izlemeyi etkinleştirmek için false ayarlayın |
OTEL_SDK_DISABLED | — | Standart OTel ortam değişkeni. LAST9_DISABLE_TELEMETRY değerini geçersiz kılar |
OTEL_EXPORTER_OTLP_ENDPOINT | — | OTLP toplayıcı uç noktası (yalnızca telemetri etkin olduğunda) |
OTEL_EXPORTER_OTLP_HEADERS | — | OTLP kimlik doğrulama başlıkları (yalnızca telemetri etkin olduğunda) |
Araç aşaması zamanlaması
Dahili telemetri etkin olduğunda araç aralıkları last9.phase.<phase>.duration_ms
(gerçek geçen milisaniye) ve last9.phase.<phase>.failed (aşamanın
hata döndürüp döndürmediği) alanlarını içerir. Yapılandırılmış günlükçü hata ayıklama kayıtlarını kabul ettiğinde aynı alanlar, tool ve phase ile birlikte tool phase completed hata ayıklama
günlükleri olarak da yayımlanır.
Bu zamanlamalar girdileri, sorgu metnini, kimlik bilgilerini veya hata gövdelerini eklemez.
| Araç | Aşamalar |
|---|---|
get_log_patterns | sample: örneği getirip çözümleme; mine: örüntü madenciliği; deep_link: isteğe bağlı dizini çözümleme ve bağlantıyı oluşturma |
get_logs | fetch: yeniden denemeler ve isteğe bağlı sayı tutarlılığı kontrolleri dâhil sonuçları getirme, çözümleme ve birleştirme; count_sanity: iç içe geçmiş isteğe bağlı kontrol; post_process: yönlendirme, özet ve JSON biçimlendirme; deep_link: dizini çözümleme ve bağlantıyı oluşturma |
get_service_profile | request: paylaşılan API istemcisi üzerinden isteği hazırlama ve gönderme, ardından kısa biçimlendirmeden önce yanıtın tamamını okuma |
Başarısız getirme işlemleri dâhil, yalnızca yürütülen aşamalar kaydedilir. Hataları bastıran isteğe bağlı yardımcılar bu davranışı sürdürür; failed: false, isteğe bağlı bir bağlantının veya sayı kontrolünün kullanılabilir olduğunu doğrulamaz. İç içe geçmiş count_sanity süresi zaten fetch içinde yer alır; iki kez eklemeyin. Getirme süresi istemci çalışmalarını da içerir, dolayısıyla yalnızca arka uç yürütmesinin ölçümü değildir. Örnekleme veya önbelleğe alma ayarlarını değiştirmeden önce bu aşamaları eşdeğer zaman aralıkları ve arama yolları üzerinde karşılaştırın.
Gecikme araştırması için aynı hizmeti, veri kaynağını, dizini, zaman aralığını
ve sınırları temel ve aday derlemelerde yeniden oynatın. Derleme SHA’sını, araç toplamını,
aşama sürelerini, last9.logs.search_path değerini, varsa yeniden deneme özniteliklerini ve
kapsam işaretlerini kaydedin. Yavaş çağrıların yanı sıra tipik çağrıları da karşılaştırın. Yavaş bir getirme veya profil isteği, incelenmesi gereken bir ağ/API aşamasını gösterir; gecikmenin kuyruğunu arka uca bağlamadan önce arka uç yürütmesine ilişkin kendi korelasyonlu kanıtınız gerekir.
Bu tanılamalar tek başına gecikmede iyileşme olduğunu kanıtlamaz.
Salt okunur mod
--read-only (veya LAST9_MCP_READ_ONLY=true), yalnızca readOnlyHint: true açıklamasıyla işaretlenmiş araçları sunar. Böylece hiçbir araç uyarı kuralları, bildirim kanalları, panolar veya bırakma kuralları oluşturamaz, değiştiremez ya da silemez; uyarıları onaylayamaz veya yeniden atayamaz ya da grupları sessize alamaz. Açıklaması olmayan bir araç yazma aracı sayılır ve gizlenir.
Birkaç yazma aracını açık tutmak için bunları --allow-write-tools (veya LAST9_MCP_ALLOW_WRITE_TOOLS) ile listeleyin:
last9-mcp --read-only --allow-write-tools=acknowledge_alert,mute_alert_group
- İzin verilen bir ad yazma aracı değilse (yazım hatasıysa veya bir okuma aracının adıysa) sunucu başlatılmaz; hata, geçerli yazma araçlarını listeler.
--read-onlyolmadan--allow-write-toolskullanılması başlangıç hatasına yol açar; çünkü tüm yazma araçları zaten sunuluyordur.- Salt okunur mod,
--toolsetsile birlikte çalışır: bir araç yalnızca her iki koşulu da karşılıyorsa sunulur.--toolsets=alerts --read-only --allow-write-tools=mute_alert_group, uyarı okuma araçlarını vemute_alert_grouparacını sunar; seçilen araç kümelerinin dışındaki izinli bir yazma aracı gizli kalır. --httpmodu vedump-toolsaynı işaretleri ve ortam değişkenlerini dikkate alır:go run . dump-tools --read-only, sunulan salt okunur arayüzü ve sunucununinstructionsiçinde sunduğu talimatları yazdırır.- Okuma araçlarının açıklamaları, şemaları ve sonuçları ile sunucu talimatları, gizli bir yazma aracının adını hiçbir zaman içermez. İzin verilen bir yazma aracı yine de gizli kardeş araçlarından söz edebilir (
create_alert,patch_alertaracının etkinleştirdiği devre dışı bir kural oluşturur); bu nedenle bu tür araç çiftlerine birlikte izin verin.
Yapabilecekleri
Genel Bakış
get_workspace_overview— İstek bir hizmet veya araç belirtmiyorsa önerilen ilk çağrıdır (belirtiyorsa doğrudan ilgili araca gider): ortamlar, son bir saatte hangi sinyallerin (günlükler, izler, metrikler) görüldüğü, hizmet ve uyarı grubu sayıları, tetiklenen uyarılar ve geçerli zaman; tümü tek ve düşük maliyetli bir çağrıda. Bu saat içinde görülmeyen bir sinyalin daha eski verileri yine de bulunabilir, dolayısıyla sorgulanabilir olmaya devam eder. Başarısız bir alt çağrı, ilgili alanınullolarak bırakır ve birerrors[]girdisi ekler. Her araç kümesinde sunulurget_current_time— Geçerli zamanın yanı sıra herhangi bir IANA saat diliminde veya yaygın kısaltmadalast 2h,yesterdayya dasince yesterday 9am ISTiçin mutlak sınırlar. Her araç kümesinde sunulur
Hizmet Durumu
get_service_summary— Sıralanmış filo(service, env)satırları: aralık içindeki request_count, throughput_rpm, HTTP 4xx/5xx sayıları ve gRPC hata sayılarıget_service_environments— Hizmetleriniz için kullanılabilir ortamlar. Önce bunu çalıştırın; diğer APM araçları buradan alınanenvdeğerine ihtiyaç duyarget_service_performance_details— Ayrıntılı döküm: aktarım hızı, hata oranı, p50/p90/p95/avg/max, apdex, kullanılabilirlik (varsayılan olarak özetlenir;include_seriesile tam zaman serisi alınır)get_service_operations_summary— HTTP uç noktaları, DB çağrıları, mesajlaşma ve HTTP istemcilerine göre gruplandırılmış işlemlerget_service_dependency_graph— Yukarı akış/aşağı akış/altyapı için aktarım hızı, gecikme ve hata oranlarını içeren bağımlılık haritasıget_apm_service_deviations— Geçerli zaman aralığını eşit süreli bir temel aralıkla karşılaştırır: gerilemeler/iyileşmeler, Apdex mutabakatı ve nihai sonuç (filo veya tek hizmet)get_exceptions— Hizmet ve span filtreleriyle sunucu tarafı istisnalar
Veritabanı Gözlemlenebilirliği
Doğrudan veritabanı performansınıza odaklanan, OpenTelemetry iz span’lerinden ve izlerin bulunmadığı durumlarda CloudWatch gibi altyapı metriklerinden türetilen dört araç. Zaten OTel kullanıyorsanız ek enstrümantasyon gerekmez.
get_databases— Altyapınızdaki tüm veritabanlarını keşfedin: DB türü, ana makine, aktarım hızı (sorgu/dakika), p95 gecikme süresi, hata oranı ve bağımlı hizmet sayısı. Ayrıca CloudWatch gibi altyapı metriklerinden veritabanlarını keşfeder; iz enstrümantasyonu gerekmez — bu satırlarda iz metrikleri yerine etkinlik değeri bulunurget_database_slow_queries— Süreye göre sıralanmış, tam izlere ulaşmak için iz kimliklerini içeren, gerçekten en yavaş sorgu yürütmeleriget_database_queries— Sorgu kalıpları ve toplamları: bir sorgunun çalışma sıklığı, ortalama/p95 süresi, hata oranıget_database_server_metrics— DB ana makinesinin kendisinden alınan sunucu tarafı metrikler (CPU, bağlantılar, arabellek isabet oranları — DB sisteminize bağlıdır)
PostgreSQL, MySQL, MongoDB, Redis, Aerospike ve db_system özniteliğine sahip OTel izleri üreten diğer her şeyi destekler — ayrıca CloudWatch gibi altyapı metriklerinden keşfedilen ve satırlarında iz metrikleri yerine etkinlik değeri bulunan veritabanlarını da destekler.
Prometheus / PromQL
prometheus_range_query— Herhangi bir metrik üzerinde PromQL aralık sorgularıprometheus_instant_query— Anlık sorgular;avg_over_time,sum_over_timegibi toplama işlevlerini kullanınprometheus_label_values— Belirli bir serinin etiket değerleriprometheus_labels— Bir seri için kullanılabilir tüm etiketler
LAST9_DATASOURCE ayarını yaparak veya her çağrıda datasource kullanarak bunları varsayılandan farklı bir veri kaynağına/kümeye yönlendirin. datasource belirtilmezse varsayılan kullanılır; eşleştiricinin güvenli bulduğu benzersiz ve yakın bir eşleşme (ör. büyük/küçük harf farkı) en yakın eşleşmeyi kullanır. Eksik, fazladan veya yeri değiştirilmiş bir harfin otomatik olarak çözümleneceği garanti edilmez: düzenleme bir bölgeyi veya ortam kodunu etkileyebilecekse tek bir aday bile onay gerektirebilir. Daha gevşek veya belirsiz eşleşmeler adayları döndürür ve sorgu çalıştırmaz (hata değildir); bilinmeyen adlar hata döndürür. Adı tam olarak belirtmediğiniz durumlarda ek bir içerik bloğu kullanılan veri kaynağını belirtir. get_metric_status, get_service_profile ve get_apm_service_deviations, datasource değerini aynı şekilde çözümler.
Günlükler
get_logs— Tam JSON işlem hattı günlük sorguları (toplamalar, filtreler, alan çıkarma)get_service_logs— Bir hizmetin önem derecesine ve gövde içeriğine göre filtrelenebilen günlük satırları;response_modedeğerirawolmadıkça 20 satır üzerinden özetlenirget_log_patterns— Bir hizmetin belirli bir zaman aralığındaki günlük satırları; sayı, ilk/son görülme zamanı, önem derecesi dağılımı ve örnekle birlikte ileti şablonlarına göre kümelenirget_emerging_log_patterns— Temel zaman aralığına kıyasla yeni, artmış, azalmış veya kaybolmuş günlük şablonları; her iki aralığın sayılarıyla birlikteget_log_attributes— Bir zaman aralığı için günlük şemasındaki özniteliklerin genel kataloğuget_log_attributes_for_pipeline— Devam eden bir işlem hattında gerçekten bulunan günlük alanları (kapsamlı keşif); her biri tamfilter_fielddeğeriyleget_drop_rules— Last9 Control Plane üzerinden günlük bırakma kurallarıadd_drop_rule— Kaynağında günlük hacmini azaltmak için yeni bir bırakma kuralı oluşturunget_remapping_rules— Last9 Control Plane üzerinden yeniden eşleme kuralları (logs_extract,logs_map,traces_map)add_remapping_rule— Alım sırasında günlük ve iz özniteliklerini çıkaran veya eşleyen bir yeniden eşleme kuralı oluşturun
İzler
get_traces— Geniş kapsamlı aramalar ve toplamalar için JSON işlem hattı iz sorgularıget_service_traces— Tam iz kimliğine veya hizmet adına göre izler. İz kimliğiniz varsa bunu kullanın — daha hızlıdırget_trace_attributes— İz şemasındaki özniteliklerin genel kataloğuget_trace_attributes_for_pipeline— Devam eden bir işlem hattında gerçekten bulunan öznitelikler (kapsamlı keşif); her biri tamfilter_fielddeğeriyleget_trace_attribute_values— İsteğe bağlı olarak bir işlem hattıyla sınırlandırılmış, bir iz özniteliğinin farklı değerleriget_trace_attribute_deviations— Sınırları belirlenmiş iki span grubunda farklılık gösteren öznitelik değerlerini sıralar (yavaş ve hızlı, hatalı ve hatasız ya da iki zaman aralığı). Korelasyon, neden-sonuç ilişkisi değildirget_trace_waterfall— Aralık birleşimi öz süresi, en yavaş span'ler ve grafik uyarılarıyla birlikte tek bir tam izi üst/alt öğe şelalesi olarak gösterir
Değişiklik Etkinlikleri ve Uyarılar
get_change_events— Dağıtımlar, yapılandırma değişiklikleri, geri almalar. Olayları değişenlerle ilişkilendirinanalyze_change_impact— Bir değişiklik bir şeyi bozdu mu? Bir hizmeti ve doğrudan çağıranlarını değişiklik öncesi ve sonrası karşılaştırır: temel sinyaller, APM ve iz özniteliği sapmaları, yeni tetiklenen uyarılar ve bir sonuç (regression likely/no significant change/insufficient data)get_alert_groups— Meta veri etiketleri, ekip, katman ve kural sayılarıyla yapılandırılmış Compass uyarı grupları — sıfır kuralı olan ve tetiklenmeyen gruplar da dahilget_alert_operations_summary— Bir zaman aralığındaki nöbet sağlığı: oluşturulan ve onaylanan uyarılar, birikmiş işler, teslimatlar veinclude_rulesile en gürültülü, sürekli tetiklenen ve yönlendirilmeyen kurallar. Her sayım kendistatusdeğerini taşır (available/partial/unavailable)get_alert_coverage— Uyarı oluşturmadığınız durumlar: kapsanmayan temel sinyaller, tamamen devre dışı bırakılmış veya yönlendirilmemiş uyarı grupları ve çok uzun süre sessize alınmış kurallar; her biri için önerilen bir düzeltme aracı bulunur. Salt okunur.get_alert_config— Uyarı kuralı yapılandırmaları — ada, önem derecesine, türe ve etiketlere göre aranabilirget_entity_kpis— Bir uyarı grubundaki her KPI (kimlik, ad, PromQL, birim); henüz hiçbir kuralın kullanmadığı KPI'lar da dahil — kimlikler içincreate_alertvevalidate_alert_expressiongerekircreate_kpi— Mevcut KPI'lardan hiçbiri uygun olmadığında bir uyarı grubunda KPI (PromQL + birim) oluşturun. Bir kez oluşturun ve döndürülen kimliği saklayınget_alerts— Bir zaman aralığında şu anda tetiklenen uyarılarget_alert_rule_state— Bir zaman aralığında her uyarı kuralının geçmiş tetiklenme durumu (1/0);rule_idile gruplandırılır. Uyarı grubuna, kural adına, etiket filtrelerine ve duruma göre filtrelenebilir.get_alert_hygiene— 7 veya 30 gün içindeki gürültülü, sürekli tetiklenen, eski ve yönlendirilmeyen uyarı kuralları; sıralanmış, sonucun dayandığı sayılar ve önerilen düzeltmeyle birlikte. Salt okunur.get_notification_channels— Yapılandırılmış bildirim kanalları (Slack, PagerDuty, e-posta vb.).scope=channelskanal listesini (ekleme için kimlikler) verir; varsayılanattachedise uyarı grubu başına eklemeleri listelerrecommend_alert_config— Uyarı kuralı oluşturmadan önce salt okunur tasarım rehberi (yaşam döngüsü, doğrulama kapıları, müdahale edenler için bağlam)validate_alert_expression— Hiçbir şeyi kaydetmeden bir uyarı ifadesini uyarı grubunun KPI'larına göre deneme çalıştırmasıyla sınayındescribe_alert_chart— Salt okunur: bir Discover grafiğindeki uyarı verilebilir sinyaller (anahtar, birim) (discover-service,discover-exceptions)create_alert— Mevcut bir uyarı grubunda bir uyarı kuralı oluşturun (statik veyaadaptive_std_cmparacılığıyla uyarlamalı); her zaman devre dışı bir taslak olarak oluşturulur. Bir kez oluşturun;update_alert/patch_alertile iyileştirincreate_alert_from_chart— Tek çağrıda bir Discover grafiğinden statik eşik uyarı kuralı oluşturun.create_alertgibi, kural devre dışı bir taslak olarak oluşturulurupdate_alert— Bir kuralın değerlendirme yapılandırmasını tamamen değiştirir (yeni bir kural kimliği döndürebilir)patch_alert— Bir kuralda kısmi değişiklik: etkinleştir/duraklat,mute_until, müdahale edenproperties, haftalıkrecurring_mute_schedule(veyaclear_recurring_mute_schedule)delete_alert— Bir uyarı kuralını kalıcı olarak silinmute_alert_group— Bir uyarı grubundaki her kuralı bir son tarihe kadar sessize alın (veya sessizden çıkarın)acknowledge_alert— Tetiklenen bir uyarının sahipliğini alın veya bırakınreassign_alert— Zaten onaylanmış bir uyarıyı başka bir kullanıcıya devredincreate_notification_channel— Slack, PagerDuty, Opsgenie, e-posta veya genel bir webhook kanalı oluşturunattach_notification_channel— Mevcut bir kanalı bir uyarı grubunabreach,threatveya her ikisi için yönlendirindetach_notification_channel— Bir kanal ile uyarı grubu arasındaki tek bir ilişkilendirmeyi kaldırındelete_notification_channel— İlişkilendirmesi olmayan bir kanalı kalıcı olarak silin
Uyarı yazma araçları (create_kpi, create_alert, update_alert, patch_alert, delete_alert, create_alert_from_chart, mute_alert_group, acknowledge_alert, reassign_alert, create_notification_channel, attach_notification_channel, detach_notification_channel, delete_notification_channel) yazma kapsamına sahip bir belirteç gerektirir; delete_alert, detach_notification_channel ve delete_notification_channel ise bunun yerine silme kapsamı gerektirir. Bunlar yalnızca alerts araç kümesinde sunulur.
Bu araçların oluşturduğu kurallar, kanallar ve ilişkilendirmeler; MCP istemcisinin adı ve sürümüyle birlikte created_via: last9-mcp olarak işaretlenir (kurallarda _l9_created_via_ ve _l9_created_via_client_ ek açıklamaları bulunur; patch_alert ve update_alert bunları korur ve çağıranlar ayarlayamaz). get_entity_alert_rules ve get_notification_channels işareti gösterir; delete_alert, detach_notification_channel ve delete_notification_channel ise kullanıcı bir kaynağı belirtmediği sürece aracıların yalnızca işaretli kaynakları temizlemesini söyler.
Özel Panolar
list_dashboards— Ada göre filtrelenmiş ve 32 KB altında sayfalanmış özel panolar: kimlikler, adlar, son güncelleme zamanları, yazarlar ve kilit durumuget_dashboard— Paneller ve sorgular dahil, kimliğe göre tam pano tanımıpreview_dashboard— Kaydedilmemiş bir pano veya yama için salt okunur önizleme: çözümlenmiş sorgular, panel başına sınırlandırılmış sonuçlar ve net panel farkı; hiçbir zaman kaydetmezvalidate_dashboard— Kaydedilmiş bir pano kimliği veya satır içi birdashboard_definitioniçin ≤24 saatlik bir zaman aralığında salt okunur lint + yürütme + sınıflandırma. Panoları hiçbir zaman oluşturmaz veya güncellemezcreate_dashboard— Yeni bir özel panoyu bir kez oluşturun (paneller, sorgular, meta veriler). Kimlik döndürüldükten sonra panelleripatch_dashboardile düzenleyin.update_dashboard— Kimliğe göre mevcut bir panonun büyük bölümünü yeniden yapılandırın (tam değiştirme; salt okunur sistem panoları hata döndürür). Tek tek panelleri düzenlemek içinpatch_dashboardkullanınpatch_dashboard— Kimliğe göre mevcut bir panoda hedefli düzenlemeler yapın (panel ekleme/güncelleme/kaldırma/taşıma, başlık ayarlama, değişken ayarlama); panonun tamamını değil, kısa bir fark döndürürdelete_dashboard— Kimliğe göre özel bir panoyu silinset_dashboard_lock— Kimliğe göre özel bir panoyu kilitleyin veya kilidini açın (yalnızca yazar veya kuruluş yöneticisi); kilitli bir pano güncelleme, yama ve silme işlemlerini reddederlist_dashboard_snapshots— Bir pano için belirli bir andaki dondurulmuş anlık görüntüler (yalnızca meta veriler)get_dashboard_snapshot— RCA / paylaşılabilir görünümler için panel verilerini içeren tam dondurulmuş anlık görüntüdelete_dashboard_snapshot— Kimliğe göre dondurulmuş bir anlık görüntüyü silin
Pano oluşturma, beceri yüklemeden MCP prompts/list ve prompts/get aracılığıyla kullanılabilir. Üç istem de bağımsız değişken almaz:
create_dashboard_guide— Keşif, düzen ve panel seçimi; onaydan önce adayın tamamını doğrulayın ve her panelin sorgusunu çalıştırın, bir kez oluşturun, hedefli düzenlemeler için yama uygulayın, ardından tekrar okuyun.dashboard_examples— Hizmet RED'i, uç nokta gecikmesi, durum sınıfları, ana makine sağlığı, günlük sayıları ve iz panellerini bağımlı değişkenlerle kapsayan eksiksiz bir örnek.query_guide— Sayaç/gösterge/histogram ve türetilmiş iz metriği anlamları, anlık ve aralık sorguları, hız pencereleri, yüzde sınırları ve logjson/tracejson kuralları.
Aynı içerik last9://reference/create_dashboard_guide, last9://reference/dashboard_examples ve last9://reference/query_guide adreslerinde okunabilir. İstemler ve kaynaklar her araç kümesinde keşfedilebilir olmaya devam eder; iş akışını yürütmek için ilgili araçlar gerekir (karma sinyalli pano oluşturma için, list_datasources işlevini de gören --toolsets=dashboards,investigate kullanın). Salt okunur oturumlar hazırlık ve doğrulama yapabilir ancak kaydedemez. Bir adımı izlemeden önce araçların kullanılabilirliğini kontrol edin.
Panel denetimleri şu anda validate_dashboard ile birlikte prometheus_range_query, prometheus_instant_query, get_logs ve get_traces kullanıyor. Doğrulayıcının desteklenmeyen sorgu türleri ve basitleştirilmiş varsayılanları, görüntüleme eşitliğini kanıtlamaz. Ayrı sorgu denetimi adımı, #475 tamamlandıktan sonra query_panel kullanmaya geçecek.
Sürekli Profil Oluşturma
Kuruluş için sürekli profil oluşturmanın etkinleştirilmiş olması gerekir. Önce get_profile_services ile hizmetleri keşfedin, ardından bir alev grafiği veya sıralanmış işlevleri alın.
get_profile_services— Zaman aralığında profil verisi bulunan hizmetler (sorgulamadan önce dizin oluşturur)get_flamegraph— Tek bir hizmet için iç içe alev grafiği ağacı (cpuvarsayılan; ayrıcaalloc,wall)get_top_functions— Tek bir hizmette en yoğun işlevlerin öz örnek sıralamasıget_profile_summary— Tek bir hizmetin profilinin kısa, doğal dilli önceliklendirme analizi
Grafana Panoları
Kuruluşun Grafana örneğine (Last9'ın Grafana proxy'si üzerinden) yönelik salt okunur araçlar. Kimlik bilgisi alanları modele hiçbir zaman döndürülmez. LAST9_TOOLSETS=grafana ile etkinleştirin (veya tüm araçlar için araç kümelerini ayarlamayın).
grafana_search_dashboards— Başlık alt dizesine göre panoları ara (sayfalandırılmış; sınıra ulaşıldığındatruncated: true)grafana_get_dashboard— UID'ye göre pano özeti (paneller, değişkenler, PromQL hedefleri); ham Grafana JSON'u içinfull_json=truegrafana_list_folders— Klasör ağacıgrafana_list_folder_dashboards— Tek bir klasördeki panolar (sayfalandırılmış)grafana_list_datasources— Kimlik bilgileri olmadan veri kaynağı envanteri
Bulanık Ad Çözümleme
did_you_mean— Aracı bir varlık adından emin olmadığında, kataloğunuzdaki en yakın eşleşmeleri döndürür (hizmetler, ortamlar, ana makineler, veritabanları, K8s dağıtımları/ad alanları, işler). Benzerlik puanlarıyla en fazla 3 öneri sunar. Ad araması boş sonuç verdiğinde sunucu, çoğu araçtan önce bunu otomatik olarak çağırır.
Hizmet Profili
get_service_profile— Sorgulamadan önce bir hizmetin telemetrisinin gerçekte nasıl göründüğünü gösterir: hangi sinyallerin bulunduğunu, dili ve çalışma zamanını, dağıtım ortamlarını, günlüklerinin yapısını ve uygulanabildiği durumlarda önerilen alım düzeltmesini. Bir hizmette iz yoksa aracının iz araçlarını atlamasını;SeverityTextboş olduğunda hiçbir sonuç bulamadan bu alana göre filtrelemek yerine günlük gövdesinden önem derecesini ayrıştırmasını sağlar.
Nasıl Çalışır
Her yanıtta derin bağlantılar. Her araç, tam olarak o sorgu ve zaman aralığı için Last9 panosuna doğrudan giden bir URL olan deep_link alanını döndürür. Aracı bağlantıyı size iletir; tıklarsınız ve doğrudan ilgili yere ulaşırsınız.
Araç kümeleri. Varsayılan olarak sunucu tüm araçları sunar. Yalnızca inceleme (günlükler/izler/metrikler/profiller) gerektiren otomasyon ana makineleri, istemci tarafında toplu devre dışı bırakma yapmadan tools/list boyutunu küçük tutmak için LAST9_TOOLSETS=investigate ayarını yapabilir (veya --toolsets=investigate iletebilir). Adlandırılmış paketler: logs, traces, metrics, alerts, dashboards, profiles, grafana, investigate, all. Bilinmeyen adlar hemen hata verir. get_current_time ve get_workspace_overview her araç kümesinde sunulur. HTTP modunda bir istek, X-Last9-Toolsets başlığıyla kapsamı daha da daraltabilir (İstek başına araç kümeleri bölümüne bakın). alerts paketi ayrıca salt okunur prometheus_range_query ve get_dashboard araçlarını da sunar; bunları author-alert istemi çağırır. Yalnızca metrics paketi, list_datasources veya did_you_mean araçlarını içermez — bu keşif yardımcılarına ihtiyacınız olduğunda investigate kullanın (veya araç kümelerini birleştirin).
Araç başvurusu kaynakları. Uzun logjson/tracejson/service-logs/metrics kılavuzları, her zaman açık araç açıklaması metni yerine MCP kaynaklarıdır (last9://reference/logjson, last9://reference/tracejson, last9://reference/service_logs, last9://reference/metrics, last9://reference/investigation, last9://reference/alerting). Uyarı kılavuzu; uyarı ifadesi dilbilgisini, statik ve uyarlanabilir alanları, birimleri, validate_alert_expression aracının neleri denetlediğini ve gecikme / hata oranı / doygunluk kuralı şablonlarını kapsar. Kritik sorgu kuralları araç açıklamasında kalır; böylece resources/read aracını hiç çağırmayan aracılar da doğru sorgu oluşturma yönergelerini alır. Kuruluşa özgü alanları get_log_attributes / get_log_attributes_for_pipeline (ve iz eşdeğerleri) ile keşfedin; bunlar açıklamalara eklenmez.
Parçalı büyük sonuçlar. get_logs ve get_traces, büyük sonuç kümelerini kesmek yerine parçalara ayırarak işler. Günlükler için varsayılan sınır 5000 girdidir; LAST9_MAX_GET_LOGS_ENTRIES ile yapılandırılabilir.
Geliştirme
HTTP modu, curl ile test, kaynaktan derleme
HTTP Modunda Çalıştırma
export LAST9_REFRESH_TOKEN="your_refresh_token"
export LAST9_HTTP=true
export LAST9_PORT=8080
./last9-mcp-server
Sunucu http://localhost:8080/mcp adresinde başlar.
curl ile Test Etme
Streamable HTTP işleyicisi durumsuz modda çalışır; bu nedenle her istek bağımsız olarak sunulur. initialize el sıkışması ve Mcp-Session-Id başlığı isteğe bağlıdır — bunları gönderen istemciler de çalışır (başlık kabul edilir ve yok sayılır); istemciler doğrudan tools/list / tools/call isteklerine de geçebilir. Her araç bağımsız bir istek/yanıt sorgusudur; sunucu sunucudan istemciye bildirim göndermez, bu nedenle GET /mcp (SSE akışı) 405 döndürür.
# List tools — a session handshake is optional in stateless mode
curl -s -X POST http://localhost:8080/mcp \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{"jsonrpc": "2.0", "id": 1, "method": "tools/list", "params": {}}'
# Call a tool
curl -s -X POST http://localhost:8080/mcp \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{
"jsonrpc": "2.0",
"id": 2,
"method": "tools/call",
"params": {
"name": "get_service_logs",
"arguments": {
"service_name": "your-service-name",
"lookback_minutes": 30,
"limit": 10
}
}
}'
İstek başına araç kümeleri
HTTP modunda bir istek, X-Last9-Toolsets başlığıyla veya başlık ayarlayamayan istemciler için toolsets sorgu parametresiyle araç yüzeyini daraltabilir (/mcp?toolsets=logs,traces). Her ikisi de gönderildiğinde boş olmayan başlık önceliklidir. Değer, --toolsets ile aynı virgülle ayrılmış adları alır. İstek, başlangıçtaki --toolsets kümesiyle kesişimi görür: kapsamı daraltabilir, asla genişletemez; all veya boş bir değer başlangıç kümesini korur. Bilinmeyen bir ad, adı belirten 400 döndürür. tools/list, tools/call ve initialize yönergeleri de etkin kümeyi izler; get_current_time ve get_workspace_overview ise her kümede kalır.
curl -s -X POST http://localhost:8080/mcp \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-H "X-Last9-Toolsets: logs,alerts" \
-d '{"jsonrpc": "2.0", "id": 1, "method": "tools/list", "params": {}}'
Her farklı etkin küme, ilk isteğinde oluşturulan (onlarca milisaniye süren) ve kapanana kadar tutulan kendi sunucusu tarafından sunulur; başlangıç kümesini yeniden belirten bir istek, başlangıç sunucusunu yeniden kullanır. Tahliye yoktur: yalnızca adlandırılmış araç kümeleri kabul edildiğinden önbellek, bu kümelerin her birleşimi için en fazla bir sunucu tutar (bugün 135; toplamda yaklaşık 75 MB canlı yığın; testlerde tam dolu önbellek yaklaşık 230 MB yerleşik belleğe ulaştı).
Kaynaktan Derleme
git clone https://github.com/last9/last9-mcp-server.git
cd last9-mcp-server
go build -o last9-mcp-server
LAST9_HTTP=true ./last9-mcp-server
LAST9_HTTP=true yerel geliştirme içindir. Gerçek kullanımda barındırılan HTTP uç noktası daha kolaydır.
Araç Başvurusu
Tüm parametreler, zaman girişi standartları ve ayrıntılar
Zaman Girişi
- Mutlak zamanlar (
start_time_iso/end_time_isoveyatime_iso),lookback_minutesdeğerine önceliklidir. - Göreli aralıklar için
lookback_minuteskullanın. - Mutlak aralıklar için RFC3339/ISO8601 kullanın —
2026-02-09T15:04:05Z. - Eski
YYYY-MM-DD HH:MM:SSyalnızca geriye dönük uyumluluk için kabul edilir. since yesterday 9am ISTgibi ifadeleriget_current_timeile RFC3339 sınırlarına dönüştürün.
get_workspace_overview
Parametre yoktur. Son 60 dakikayı eşzamanlı olarak yoklar; her alt çağrı kısa bir zaman aşımıyla çalışır ve current_time, lookback_minutes, environments, telemetry (logs/traces/metrics boole değerleri), service_count (her ortamda, get_service_summary sıralamasına göre farklı hizmetler), alert_group_count, firing_alert_count ve errors ([{field, error}]) döndürür. Alt çağrısı başarısız olan bir alan null (bilinmiyor) olur; hiçbir zaman 0 veya false olmaz. Yoklamalar --toolsets ile daraltılmaz: araç kümeleri hangi araçların sunulacağını filtreler, API belirteci ise sunucunun neleri okuyabileceğini belirler.
get_current_time
range(dize, isteğe bağlı):last 2h,past 30 minutes,last 7d(s, m, h, d = 24h, w = 7d; en fazla 366d);today;yesterday;since <point>;<point> to <point>. Bir zaman noktası RFC3339 biçiminde olabilir veyatoday/yesterday/ bir hafta günü (monday,mon: bugün dâhil en son gerçekleştiği tarih) / isteğe bağlı9am,9:30pmveya14:30içerenYYYY-MM-DDolabilir. Sondaki bir saat dilimi her iki sınır için detimezonedeğerini geçersiz kılar; başka bir yerde belirtilen saat dilimi hatadır. Yalnızcanowiçin boş bırakın.timezone(dize, isteğe bağlı): IANA adı veya kısaltması (IST = Asia/Kolkata, PST/PDT, EST/EDT, UTC, GMT). Varsayılan UTC'dir. Bilinmeyen saat dilimleri ve belirsizCSThata verir (America/ChicagoveyaAsia/Shanghaiiletin).
now değerini (ve range ile birlikte start/end değerlerini) {iso, epoch_seconds, local} olarak döndürür; local yalnızca UTC dışı bir saat diliminde görünür.
get_exceptions
limit(tamsayı, isteğe bağlı): En fazla istisna sayısı. Varsayılan: 20.lookback_minutes(tamsayı, isteğe bağlı): Varsayılan: 60.start_time_iso/end_time_iso(dize, isteğe bağlı): Mutlak zaman aralığı.service_name(dize, isteğe bağlı): Hizmete göre filtrele.span_name(dize, isteğe bağlı): Span adına göre filtrele.env(dize, isteğe bağlı): Ortama göre filtrele.
get_service_summary
start_time_iso/end_time_iso(dize, isteğe bağlı)env(dize, isteğe bağlı): PromQL regex'i. Varsayılan.*. Tam eşleşme için sabitleyiciler gerekir (ör.^prod$).sort_by(dize, isteğe bağlı):request_count(varsayılan),throughput_rpm,http_4xx_count,http_5xx_countveyagrpc_error_count.limit(tamsayı, isteğe bağlı): Sıralanmış satırların en fazla sayısı. Boş bırakılırsa veya 0 ise 10; 100'ün üzerindeki değerler 100'e sabitlenir.
get_service_environments
start_time_iso/end_time_iso(dize, isteğe bağlı)
Diğer tüm APM araçları bir
envdeğeri gerektirir. Bu boş dönerse""kullanın.
get_service_performance_details
Varsayılan olarak seri başına bir özet döndürür: points, missing_points (trafik olmayan kullanılabilirlik aralıkları istatistiklerden çıkarılır), min, p50, p90, p99 (en yakın sıra), max, mean, last, baseline_mean (zaman aralığının değil, geçerli noktaların ilk yarısının ortalaması), delta_pct (geçerli noktaların ikinci yarısının temel çizgiye göre durumu; temel çizgi 0 ise bulunmaz) ve en fazla 3 change_points (timestamp, before_mean, after_mean); metrik başına ve her yanıt süresi yüzdeliği için en fazla 4 seri (ortalama değeri en yüksek olan önce gelir; series_omitted geri kalanların sayısını belirtir). points: 0 içeren bir seri istatistik taşımaz; baseline_mean/delta_pct için en az 6 nokta gerekir (her yarıda 3). full_series, ham noktaların include_series aracılığıyla kullanılabildiğini belirtir.
service_name(dize, zorunlu)lookback_minutes(tamsayı, isteğe bağlı): Varsayılan: 60.start_time_iso/end_time_iso(dize, isteğe bağlı)env(dize, isteğe bağlı): Varsayılanprod.top_n(tamsayı, isteğe bağlı): En çok işlem/en çok hata listesi başına en fazla girdi sayısı. Varsayılan: 5;include_series=trueile 10. En fazla 100.include_series(boole, isteğe bağlı): Özet yerine her serinin tüm noktalarını döndürür. Varsayılan: false.
get_service_operations_summary
service_name(dize, zorunlu)lookback_minutes(tamsayı, isteğe bağlı): Varsayılan: 60.start_time_iso/end_time_iso(dize, isteğe bağlı)env(dize, isteğe bağlı): Varsayılanprod.
get_service_dependency_graph
service_name(dize, isteğe bağlı)lookback_minutes(tamsayı, isteğe bağlı): Varsayılan: 60.start_time_iso/end_time_iso(dize, isteğe bağlı)env(dize, isteğe bağlı): Varsayılanprod.
get_apm_service_deviations
service_name(string, optional): Fleet kapsamı için atlayın; tek bir hizmet ve onun işlem korelasyonları için sağlayın.lookback_minutes(integer, optional): Geçerli pencere. Varsayılan: 60.start_time_iso/end_time_iso(string, optional): Açıkça belirtilen geçerli pencere.baseline_start_time_iso/baseline_end_time_iso(string, optional): Açıkça belirtilen temel pencere. Varsayılan olarak hemen önceki, eşit süreli pencere kullanılır.datasource(string, optional): Varsayılan için atlayın; yaklaşık adlar Prometheus araçlarında olduğu gibi çözümlenir. Yanıtta kullanılan varsayılan veya en yakın eşleşme belirtilir; belirsiz adlar sorgu yapılmadan adayları döndürür.env(string, optional): Varsayılan olarakprodkullanılır.max_services/max_operations(integer, optional): Varsayılan 10, her biri için en fazla 10.
get_databases
env(string, optional): Ortama göre filtreleyin. Normal ifade kabul eder. Varsayılan: tümü.lookback_minutes(integer, optional): Varsayılan: 60. Pencere 7 günü aşamaz.start_time_iso/end_time_iso(string, optional)
get_database_slow_queries
db_system(string, optional): ör.postgresql,mysql,mongodb,redis.host(string, optional): Veritabanı ana bilgisayarı (net_peer_name).service_name(string, optional): Çağıran hizmetin adı.env(string, optional)min_duration_ms(float, optional): Sorgu süresi için minimum değer (ms).lookback_minutes(integer, optional): Varsayılan: 60.start_time_iso/end_time_iso(string, optional)limit(integer, optional): Varsayılan: 20.
get_database_queries
db_system(string, optional)host(string, optional)service_name(string, optional)env(string, optional)lookback_minutes(integer, optional): Varsayılan: 60.start_time_iso/end_time_iso(string, optional)limit(integer, optional): Varsayılan: 20.
get_database_server_metrics
db_system(string, required): ör.postgresql,mysql,mongodb,redis,aerospike.host(string, optional)lookback_minutes(integer, optional): Varsayılan: 60.start_time_iso/end_time_iso(string, optional)
prometheus_range_query
query(string, required): PromQL sorgusu.start_time_iso/end_time_iso(string, optional): Varsayılan olarak son 60 dakika kullanılır.lookback_minutes(float, optional): Varsayılan: 60.
prometheus_instant_query
query(string, required)time_iso(string, optional): Varsayılan olarak şimdi kullanılır.lookback_minutes(float, optional)
prometheus_label_values
match_query(string, optional): PromQL filtresi.label(string, required): Etiket adı.lookback_minutes(float, optional): Varsayılan: 60.start_time_iso/end_time_iso(string, optional)
Pencere belirtilmediğinde ve match_query tek bir metriği (metric{...} veya {__name__="metric"}) adlandırdığında, boş bir 60 dakikalık sonuç 4 gün üzerinden bir kez daha denenir; ikinci metin bloğu sonucun hangi pencereyi kapsadığını belirtir.
prometheus_labels
match_query(string, optional): PromQL filtresi.lookback_minutes(float, optional): Varsayılan: 60.start_time_iso/end_time_iso(string, optional)
Boş tek metrik aramasını, prometheus_label_values gibi 4 gün üzerinden yeniden dener.
get_logs
logjson_query(array, required): JSON işlem hattı sorgusu.lookback_minutes(integer, optional): Varsayılan: 5.start_time_iso/end_time_iso(string, optional)limit(integer, optional): Sunucu varsayılanı: 5000.index(string, optional):physical_index:<name>veyarehydration_index:<block_name>.response_mode(string, optional):summary(varsayılan; ayrıcanulliçin) veyaraw. Ham satır sonucu 20 satırı aşarsa,summaryşu şekilde döner:lines_summarized,severity_counts(en çok altı etiket, geri kalanıother_severitiesiçinde),first_timestamp/last_timestamp, sorgu penceresi boyunca 10 bölmeli birhistogram(döndürülen satırlar üzerinden; sonuç sınır nedeniyle kesildiysetruncated: trueile birlikte) ve en üsttekipatterns(template,count, en fazla ikisamples); geri kalanıotheriçinde toplanır ve toplam uzunluk en fazla 4000 karakter olur. Sığmayan üst düzey meta veriler atılır vedropped_fieldsiçinde belirtilir.rawsatırları döndürür. Toplu sonuçlar hiçbir zaman özetlenmez.
Günlüklere dayalı hizmet envanteri için önce physical_index_service_count sorgulayın:
sum by (name, service_name, env) (physical_index_service_count{destination="logs"})
service_name değerini ServiceName olarak, varsa env değerini ortam olarak ve name değerini fiziksel dizin adı olarak kullanın. name="default" ise index değerini atlayın; kullanıcı tarafından seçilen varsayılan olmayan bir fiziksel dizin için index: "physical_index:<name>" değerini iletin. Arka uç açık fiziksel dizin filtrelemesini reddederse index olmadan yeniden deneyin ve bu arka uçta açık fiziksel dizin filtrelemesinin kullanılamadığını bildirin.
get_service_logs
service_name(string, required)lookback_minutes(integer, optional): Varsayılan: 60.limit(integer, optional): Varsayılan: 100;response_mode: "raw"ile 20.env(string, optional)severity_filters(array, optional): ör.["error", "warn"]. OR mantığı.body_filters(array, optional): ör.["timeout", "failed"]. OR mantığı.start_time_iso/end_time_iso(string, optional)index(string, optional)response_mode(string, optional):summary(varsayılan; ayrıcanulliçin) veyaraw. 20 satırı aşarsalogs,get_logsile aynısummaryile değiştirilir; diğer alanlar korunur.rawgirdileri döndürür.
Birden fazla filtre türü AND mantığıyla birleştirilir. Her dizi kendi içinde OR mantığını kullanır.
Önce geniş kapsamlı toplu sayımlar için get_logs kullanın; get_service_logs değerini yalnızca hizmet/ortam/dizin kapsamını daralttıktan ve küçük bir örnek kümesi belirledikten sonra kullanın.
get_log_patterns
service_name(string, required)env(string, optional)start_time_iso/end_time_iso(string, optional)lookback_minutes(integer, optional): Varsayılan: 60.severity_filters/body_filters(array, optional):get_service_logsiçindeki gibi OR mantığı.severity_filtersdeğerini yalnızcaget_service_profile,severity_setallbildirdiğinde ayarlayın;noneveyapartialile gövdedeki önem derecesi bu değer olan satırlar elenir.index(string, optional)sample_size(integer, optional): Pencereden örneklenen satırlar, en yeniden eskiye. Varsayılan: 1000, en fazla: 5000.top_n(integer, optional): Sayıma göre döndürülen şablonlar. Varsayılan: 20, en fazla: 100. Geri kalanıotheriçinde toplanır.
Kümeleme, örneklenen satırlar üzerinde MCP sunucusunda çalışır; bu nedenle sayımlar, first_seen ve last_seen örnek içindedir. window.sample_limit_reached, örneğin eşleşen satırları kaçırabileceği durumları belirtir (örnek sample_size satır içeriyorsa ve API bununla eşit olan kesin bir total_matching_lines bildirmiyorsa ya da arama logs_truncated ise); bu durumda örnek yalnızca pencerenin en yeni satırlarını içerir. Her template ve sample 500 karakterde kesilir ve sonuna … eklenir; böylece kümelenmeyen bir gövde (örneğin message alanı olmayan JSON) yanıtı dolduramaz. Başarısız parçalar içeren arama araç hatasıdır; kesilmiş veya sınıra ulaşmış aramalar yine de kalıpları döndürür ve sample_limit_reached ile işaretlenir. Boş bir patterns listesi, yalnızca sample_limit_reached false olduğunda hiçbir şeyin eşleşmediği anlamına gelir; true olduğunda arama erken durmuştur ve eşleşen satırları kaçırmış olabilir.
get_emerging_log_patterns
Her get_log_patterns parametresini alır (zaman aralığı geçerli penceredir), ayrıca:
baseline_start_time_iso/baseline_end_time_iso(string, optional): İkisini de ayarlayın veya hiçbirini ayarlamayın. Varsayılan: geçerli pencereden hemen önceki, eşit uzunluktaki pencere.min_count(integer, optional): Değişen bir kalıbın daha sık görüldüğü pencerede ihtiyaç duyduğu satır sayısı:new/increasediçin geçerli pencere,decreased/disappearediçin temel pencere. Varsayılan: 3 (daha küçüksesample_size), en fazla:sample_size.change_factor(number, optional): Her iki pencerede de görülen bir kalıbın ulaşması gereken (increased) veya tersine düşmesi gereken (decreased) 1'den büyük sıklık oranı. Varsayılan: 2.
Her iki eşik de karşılanmalıdır; bu nedenle sıklığı change_factor kadar değişmeyen yüksek hacimli bir şablon hiçbir zaman raporlanmaz. Yalnızca değişen şablonları (new, increased, decreased, disappeared) ve bunların current ile baseline sayılarını döndürür; unchanged_patterns, her iki pencerede de bulunan ancak değişimi change_factor değerinden az olan şablonları sayar; below_min_count_patterns ise min_count satırdan az olduğu için elenen değişiklikleri sayar. Her iki örnek de eşleşen tüm satırları içerdiğinde sıklıklar dakika başına karşılaştırılır; sınırlandırılmış bir örnekte kesin total_matching_lines üzerinden dakika başına tahmin edilir; diğer durumlarda örnek payları olarak karşılaştırılır. Bu durumda increased/decreased, hızdan ziyade bileşimi tanımlar (comparison_basis). Boş bir patterns listesi, her iki eşiği de aşan bir değişiklik olmadığı anlamına gelir; günlüklerin değişmediği anlamına gelmez: daha seyrek değişiklikler below_min_count_patterns içinde sayılır ve sample_limit_reached içeren bir pencere, tüm pencereleri değil örnekleri karşılaştırır.
get_log_attributes
lookback_minutes(integer, optional): Varsayılan: 15.start_time_iso/end_time_iso(string, optional)region(string, optional)index(string, optional)
get_log_attributes_for_pipeline
pipeline(array, required): Keşif kapsamını belirleyen önceki filtre aşamaları, ör.[{"type":"filter","query":{"$eq":["ServiceName","<service>"]}}].lookback_minutes(integer, optional): Varsayılan: 15.start_time_iso/end_time_iso(string, optional)region(string, optional)index(string, optional)
get_drop_rules
Parametre yok. GET /otel_settings/drop?region=... aracılığıyla düşürme kurallarını listeler.
add_drop_rule
name(string, required)filters(array, required): Her filtre:key,value,operator(equals/not_equals),conjunction(and).- Filtre anahtarları
attributes["key_name"]veyaresource.attributes["key_name"]kullanmalıdır (Last9 API tarafından zorunlu tutulur). - Kuralı
POST /otel_settings/drop?region=...&cluster_id=...aracılığıyla oluşturur.
get_remapping_rules
rule_type(string, required):logs_extract,logs_mapveyatraces_map.region(string, optional): Varsayılan: yapılandırılmış veri kaynağı bölgesi.- Kuralları
GET /otel_settings/remapping/{rule_type}?region=...aracılığıyla listeler.
add_remapping_rule
Her çağrıda bir kural oluşturur; eşleme kuralları için her target_attribute başına bir çağrı gerekir.
rule_type(string, zorunlu):logs_extract,logs_mapveyatraces_map.name(string, zorunlu)remap_keys(array, zorunlu): Kaynak alanları.logs_extractilejson: body alan adları;patternile: adlandırılmış yakalama grubu içeren tam olarak bir regex. Eşleme kuralları: öznitelik yolları, ilk boş olmayan değer kazanır.target_attribute(string, zorunlu):logs_extract:log_attributesveyaresource_attributes.logs_map:service,severityveyaresource_deployment.environment.traces_map:service.extract_type(string, yalnızcalogs_extractiçin, orada zorunlu):jsonveyapattern.action(string, yalnızcalogs_extractiçin):upsert(varsayılan) veyainsert.prefix(string, yalnızcalogs_extractiçin)preconditions(array, yalnızcalogs_extractiçin): En fazla bir{key, value, operator};operator,equals(varsayılan),not_equalsveyalike(regex) değeridir.region(string, isteğe bağlı): Varsayılan: yapılandırılmış veri kaynağı bölgesi.- Kuralı
POST /otel_settings/remapping/{rule_type}?region=...aracılığıyla oluşturur. Yeniden denenmez; zaman aşımından sonraget_remapping_rulesile kontrol edin.
get_traces
Geniş kapsamlı aramalar ve toplulaştırmalar için kullanın. Tam iz kimliği araması için get_service_traces kullanın.
tracejson_query(array, zorunlu)start_time_iso/end_time_iso(string, isteğe bağlı)lookback_minutes(integer, isteğe bağlı): Varsayılan: 60.limit(integer, isteğe bağlı): Varsayılan: 5000.
get_service_traces
trace_id veya service_name değerlerinden tam olarak biri zorunludur.
trace_id(string, isteğe bağlı): Varsayılan geriye bakış süresi: 72 saat.service_name(string, isteğe bağlı): Varsayılan geriye bakış süresi: 60 min.lookback_minutes(integer, isteğe bağlı)start_time_iso/end_time_iso(string, isteğe bağlı)limit(integer, isteğe bağlı): Varsayılan: 10.env(string, isteğe bağlı)
get_trace_attributes
lookback_minutes(integer, isteğe bağlı): Varsayılan: 15.start_time_iso/end_time_iso(string, isteğe bağlı)region(string, isteğe bağlı)
get_trace_attributes_for_pipeline
pipeline(array, zorunlu): Keşif kapsamını belirleyen önceki filtre aşamaları; ör.[{"type":"filter","query":{"$eq":["ServiceName","<service>"]}}].lookback_minutes(integer, isteğe bağlı): Varsayılan: 15.start_time_iso/end_time_iso(string, isteğe bağlı)region(string, isteğe bağlı)
get_trace_attribute_values
tag_name(string, zorunlu):get_trace_attributesiçinden öznitelik adı (ör.resource_departmentveyaattributes['http.method']).pipeline(array, isteğe bağlı): Değerlerin kapsamını belirleyen önceki filtre aşamaları; genel değerler için atlayın.lookback_minutes(integer, isteğe bağlı): Varsayılan: 15.start_time_iso/end_time_iso(string, isteğe bağlı): Geçmiş RFC3339 sınırları;lookback_minutesdeğerine önceliklidir.region(string, isteğe bağlı)
get_trace_attribute_deviations
comparison_mode(string, zorunlu):latency,errorsveyatime.service_name(string, zorunlu)environment(string, zorunlu): Tamdeployment.environmentdeğeri.operation(string, isteğe bağlı)filters(array, isteğe bağlı): İz JSON filtre koşulları.candidate_attributes(array, isteğe bağlı): En fazla 8; sınırlandırılmış keşif için atlayın.latency_threshold_ms(number, isteğe bağlı):latencymodu için zorunlu; diğer modlarda reddedilir.start_time_iso/end_time_iso(string, isteğe bağlı)lookback_minutes(integer, isteğe bağlı): Varsayılan: 15. En fazla: 15.baseline_start_time_iso/baseline_end_time_iso(string, isteğe bağlı):timemodu için zorunlu; çakışmamalı ve hedef pencereyle aynı süreye sahip olmalıdır.minimum_cohort_size(integer, isteğe bağlı): Varsayılan: 100. En az: 20.minimum_value_support(integer, isteğe bağlı): Varsayılan: 20. En az: 10.limit(integer, isteğe bağlı): Varsayılan: 10. En fazla: 10.
Eşlik eden arka uç özelliğinin etkinleştirilmesi gerekir.
get_trace_waterfall
trace_id(string, zorunlu)environment(string, isteğe bağlı)start_time_iso/end_time_iso(string, isteğe bağlı)lookback_minutes(integer, isteğe bağlı): Varsayılan: 4320 (72 saat).selected_span_id(string, isteğe bağlı): Yalnızca bu span için öznitelikleri, olayları ve bağlantıları döndürür.max_spans(integer, isteğe bağlı): Varsayılan: 500. En fazla: 1000; kuruluşun redaksiyon politikası bu sınırı daha da düşürebilir.
İz hizmetinin investigation-evidence/v1 zarfını değiştirmeden döndürür; waterfall, data altında yer alır. Hizmet waterfall'ı oluşturur ve arka uçtan çıkmadan önce değerleri kuruluş başına uygulanan bir politikaya göre redakte eder (kimlik bilgileri, sorgu sabitleri, URL'ler, e-postalar, IP'ler, kullanıcı tanımlayıcıları): sanitizer uygulanan politikayı, evidence.sanitization ise redakte edilen veya kesilen öğelerin sayısını belirtir. Gerekli bir şey redakte edilmişse, bunu aşmanın yollarını aramak yerine bir kuruluş yöneticisinden politikayı ayarlamasını isteyin. Araç; sanitizer bloğu olmayan, sanitizer.version değeri trace-evidence-sanitizer/v1 dışında olan, yinelenen JSON anahtarı içeren veya 512 KiB'tan büyük bir gövdeyi reddeder (daha düşük bir sınır için max_spans). Eşlik eden arka uç özelliğinin etkinleştirilmesi gerekir.
get_change_events
start_time_iso/end_time_iso(string, isteğe bağlı)lookback_minutes(integer, isteğe bağlı): Varsayılan: 60.service_name(string, isteğe bağlı)env(string, isteğe bağlı)event_name(string, isteğe bağlı):available_event_namesdeğerini almak için önce bunu belirtmeden çağırın.
analyze_change_impact
change_event veya service + timestamp değerlerinden tam olarak birini iletin.
change_event(object, isteğe bağlı):get_change_eventschange_events[]içindeki bir öğe, değiştirilmeden kullanılır.metric.service,metric.deployment_environmentve en erkenvalues[].timestampdeğerini kullanır.service(string, isteğe bağlı):change_eventatlandığındatimestampile birlikte zorunludur.timestamp(string, isteğe bağlı): RFC3339 veya unix saniyesi; aşağı yuvarlanarak dakikaya getirilir.env(string, isteğe bağlı): Tam ortam. Varsayılan: olayın ortamı, yoksa tümü.baseline_minutes(integer, isteğe bağlı): Varsayılan: 60. 30..120 aralığına sabitlenir.after_minutes(integer, isteğe bağlı): Varsayılan:baseline_minutes. 30..120 aralığına sabitlenir ve şimdiyle sınırlandırılır.
Aşağıdakilerden herhangi biri gerçekleştiğinde regression likely: hizmette veya en yüksek 10 çağıranından birinde hata oranı en az 1 yüzde puanı artarsa, p95 en az %40 artarsa ya da verim (rpm) en az %50 düşerse; çağıranlar iki pencerenin toplamındaki verime göre sıralanır (değişiklik öncesinde en az 100 istek ve verim dışındaki ölçümler için değişiklik sonrasında da en az 100 istek gerekir; p95 yalnızca latency_env isteklerini sayar); bunlar için bir uyarı değişiklikten sonra tetiklenmeye başlar ve değişiklik sonrası pencerenin sonunda hâlâ tetikleniyorsa (uyarı grubu adı veya bir service, service_name ya da service.name etiketiyle büyük/küçük harf duyarsız eşleştirilir; yoksa açıklama kullanılır, ancak özet gibi serbest metin asla kullanılmaz; env varsa, başka bir ortamla etiketlenmiş uyarılar büyük/küçük harf duyarsız biçimde elenir ve etiketsiz olanlar env_match: unlabelled olarak işaretlenir); ya da get_apm_service_deviations kaynaklı bir gerileme varsa. Değişiklik sonrası pencere 5 dakikadan kısaysa (gelecekteki bir değişiklik de buna dahildir), hizmette yeterli istek yoksa veya altın sinyaller, doğrudan çağıran araması, uyarılar ya da get_apm_service_deviations başarısız olduysa (tamamen veya deviations.apm.unavailable içinde listelenen sorgulardan herhangi birinde) insufficient data: eksik kanıt hiçbir zaman no significant change sonucunu vermez ve yine de bir gerileme bulunursa başarısız olan şey belirtilir. no significant change geçerli bir yanıttır, başarısızlık değildir. İz özniteliği sapmaları yalnızca env ayarlanmışsa çalıştırılır ve her iki tarafta da en fazla 15 dakikayı kapsar; bir sonucu açıklar ancak sonucu belirlemez. Bu nedenle bunların atlanması veya alınamaması sonucu değiştirmez. Her liste 10 öğe tutar ve kaç öğenin çıkarıldığını bildirir; başarısız bir üst akış çağrısı yalnızca kendi bölümünde bir error bırakır. Altın sinyal gecikmesi, her iki pencerede de tek bir ortamdan alınır ve bu ortam latency_env içinde belirtilir: env yoksa en yoğun ortam kullanılır. Altın sinyal hata oranı 5xx ve gRPC hatalarını sayar; deviations.apm ayrıca hata durumlu span'leri ve 429'ları da sayar. Çağıranın sinyalleri kendi sunucu span'leridir; bu nedenle yalnızca istemci tarafında olan çağıranlar 0 rpm gösterir.
regressions, regression likely arkasındaki her tetikleyici için bir giriş listeler; sıralama reason sırasını izler ve diğer sonuçlar için [] değeridir. Her girişte service, role (changed veya dependent), env, metric (tam olarak error_rate_pct, latency_p95_ms, throughput_rpm, alert, apm_deviation değerlerinden biri) ve ölçüm biriminde baseline/after bulunur (%, ms, rpm veya APM sinyalinin kendi değeri; alert için null). Bir alert öğesi, rule_id ve state değerlerini ekler; bunlar, örneği listeleyen değişiklik sonrası pencerenin en yeni uyarı izleme dilimindeki durumudur ve her zaman firing olur: değişiklikten sonra başlayıp değişiklik sonrası pencerenin sonuna kadar çözülen bir uyarı gerileme değildir, bu nedenle bilet oluşturmaz; alerts.started içinde kendi state değeriyle kalır ve reason bunu sayar. env, ölçümün yapıldığı ortamdır: istenen env; yoksa hata oranı ve verim tüm ortamları toplar (env: ""), p95 ise en yoğun ortamı kullanır (latency_env); bir uyarı kendi ortam etiketini, APM sapması ise kendi ortamını kullanır. Her gerileme hizmet genelindedir; bu nedenle hiçbiri bir uç nokta belirtmez.
get_alert_groups
Changeboard / etiket kapsamı denetimleri için yapılandırılmış Compass uyarı grubu envanteri. Sıfır kuralı olan grupları ve tetiklenmeyen grupları da içerir. PromQL döndürmez.
alert_group_name/alert_group_type/data_source_name(string, isteğe bağlı): Büyük/küçük harfe duyarsız alt dize eşleşmesi.team/tier(string, isteğe bağlı): Yapılandırılmış meta verilerde tam, büyük/küçük harfe duyarsız eşleşme.label_key+label_value(string, isteğe bağlı): Birlikte ayarlanmalıdır. Tek birmetadata.labelsçiftiyle tam, büyük/küçük harfe duyarsız eşleşme — hem anahtar hem değer.
id, name, type, entity_class, team, tier, metadata.labels ve kural sayılarını içeren kompakt JSON {"count":N,"groups":[...]} döndürür. Boş team / labels, ayarlanmamış anlamına gelir.
get_alert_operations_summary
start_time_iso/end_time_iso(string, zorunlu): En fazla 31 günlük RFC3339 penceresi.timezone(string, isteğe bağlı): Gün sınırları için IANA adı. Varsayılan:UTC.severities/services(array, isteğe bağlı): Özeti daraltır.include_rules(boolean, isteğe bağlı): Kural başına hijyen bilgilerini de döndürür (fire_countdeğerine göre ilk 20, sık sık tetiklenen ve yönlendirilmemiş kurallar; API kural listesini sınırladıysatruncatedile birlikte). Varsayılan:false.
alerts_raised, acknowledged, unacknowledged, current_backlog, delivered, notification_outcomes, top_rules, needs_attention ve coverage içeren JSON döndürür. Her ölçüm {status, count?, reason?} değeridir; partial sayısı pencerenin yalnızca bir bölümünü kapsar ve alt sınır değildir.
get_alert_coverage
Bir hizmet, ortam, tek bir uyarı grubu veya kapsam belirtilmediğinde tüm kuruluş için “Neler için uyarı oluşturmuyorum?” sorusunu yanıtlar. Salt okunurdur: hiçbir şeyi oluşturmaz, değiştirmez veya sessize almaz. investigate araç kümesinde de sunulur.
service(string, isteğe bağlı): Hizmet adı.environment(string, isteğe bağlı): Dağıtım ortamı (örneğinprod).entity_id(string, isteğe bağlı):get_alert_groupstarafından döndürülen uyarı grubu (varlık) UUID'si.muted_days(integer, isteğe bağlı): 1 ile 3650 arasında tam gün sayısı. Varsayılan: 7; 0, varsayılan anlamına gelir. Bu süreden daha uzun süre sessize alınmış bir kural,muted_too_longboşluğudur. Değerler kırpılır; boş dizeler yok sayılır. Boşluk türleri: uncovered_signal (latency, error_rate, throughput veya saturation üzerinde etkin kural yok; bunu kapsayacak devre dışı bir kuralın adını belirtir), all_rules_disabled (kurallarının tümü devre dışı olan bir uyarı grubu), no_notification_channel (uyarı grubunda hiçbir kanalın yönlendirmediği önem derecesine sahip bir kural), muted_too_long (süresiz olarak veyamuted_dayssüresinden uzun süre sessize alınmış;muted_sincekuralın son güncellemesidir ve süresiz sessize alma durumundamute_untilatlanır).
Kompakt JSON {scope, generated_at, complete, summary, counts, groups} döndürür. groups, mevcut her tür için bir {kind, count, gaps, omitted} girdisi içerir ve tür başına en fazla 10 boşluk listeler (omitted geri kalanını sayar; bunları görmek için kapsamı daraltın); her boşlukta suggested_tool (create_alert, create_alert_from_chart, attach_notification_channel veya patch_alert) ve yalnızca aracın kabul ettiği girdileri içeren suggested_args bulunur (patch_alert: entity_id, id ve is_disabled=false veya mute_until=0; attach_notification_channel: alert_group_id ve bir breach/threat severity; create_alert: entity_id; create_alert_from_chart: service_name); boşluğun kendi entity_id, rule_id ve signal değerleri bunların yanında listelenir. Önerilen aracı yalnızca oturumda kullanılabiliyorsa ve kullanıcı onay verirse çağırın. complete yalnızca API hiçbir boşluk listelemediğinde, tüm sayımlar 0 olduğunda ve kapsamla en az bir uyarı grubu eşleştiğinde true olur (tam service_name / env etiketleri, get_alert_groups listesine göre denetlenir); hiçbir şeyle eşleşmeyen bir kapsam, başarısız bir arama veya listelenmiş boşluk olmadan dönen sayımlar tamamlanmış sayılmaz ve summary nedenini belirtir.
get_alert_config
search_term(string, isteğe bağlı): Ad, grup, veri kaynağı ve etiketlerde serbest metin araması.rule_name(string, isteğe bağlı)severity(string, isteğe bağlı)rule_type(string, isteğe bağlı):staticveyaanomaly.alert_group_name/alert_group_type/data_source_name(string, isteğe bağlı)tags(array, isteğe bağlı): Tümü eşleşmelidir (AND mantığı).
Her kural Recent Evaluations listeler: her biri bir dakikalık 5 örnek, en yeniden eskiye doğru; her örnek, sona erdiği UTC dakikasıyla etiketlenir. İzleyici en son dakikayı geç doldurduğundan en yeni örnek çağrıdan 1–2 dakika önce sona erer. firing; ok = izleyici kuralın tetiklenmediğini bildirdi (normal, çözümlenmiş, beklemede veya boş durum; is_firing=0 olarak get_alert_rule_state içinde); unknown = kural için izleyici satırı yok (henüz değerlendirilmedi veya o dakikadaki arama başarısız oldu; yanıtın üst kısmında belirtilir) ya da durumu firing, normal, resolved, pending veya empty olmayan bir satır var (ör. no_data, silenced). Devre dışı kurallar none gösterir. Eşleşen etkin kural sayısı 25'i aşarsa tümü için geçmiş atlanır ve yanıt bunu belirtir.
get_entity_kpis
Salt okunur; alerts ve investigate araç kümelerinde bulunur. Henüz hiçbir uyarı kuralının kullanmadığı KPI'lar da dahil olmak üzere tek bir uyarı grubundaki tüm KPI'ları listeler. Döndürülen kimlikleri expression_args / indicators_used içinde kullanın; asla kendiniz bir kimlik uydurmayın.
entity_id(string, zorunlu): Uyarı grubu/varlık UUID'si;get_alert_groupsveyaget_alert_configüzerinden alınır.
Ada göre sıralanmış JSON {"entity_id","count","kpis":[{"id","name","description","query","unit"}]} döndürür. unit bir görüntüleme etiketidir: eşikler ham sorgu değeriyle karşılaştırılır. Uygun KPI yoksa create_kpi ile bir tane oluşturun. Boş bir grubun sonucu, yalnızca oturum bunu sunuyorsa create_kpi adını verir; --read-only ile ( --allow-write-tools=create_kpi olmadığı sürece) veya investigate araç kümesinde bunun yerine KPI oluşturmak için yazılabilir bir alerts oturumu gerektiğini belirtir.
create_kpi
Mevcut bir uyarı grubunda KPI oluşturur; yalnızca alerts araç kümesinde kullanılabilir. Yalnızca get_entity_kpis içinde ihtiyacınız olan sorguya sahip bir KPI yoksa kullanın. Önce sorgunun veri döndürdüğünü prometheus_range_query ile kontrol edin: API yalnızca ayrıştırılamayan sorguları reddeder ve mevcut olmayan bir metriğe yönelik geçerli sorguyu kaydeder.
entity_id(string, zorunlu): Uyarı grubu/varlık UUID'si.name(string, zorunlu): Uyarı grubu içinde benzersiz olmalıdır; aynı adla ikinci bir oluşturma isteği çakışma olarak reddedilir.query(string, zorunlu): PromQL. Bir pano panelinde uyarı oluşturmak için panelin PromQL ifadesiniget_dashboardüzerinden alın.unit(string, zorunlu): Sorgunun ham değerinin birimi; ör.seconds,ms,percent,ratio,count,req/s. Bu yalnızca bir etikettir ve hiçbir dönüşüm yapmaz; dolayısıyla eşikler ham değerle karşılaştırılır.description(string, isteğe bağlı)data_source_id(string, isteğe bağlı): Varsayılan olarak uyarı grubunun veri kaynağını kullanır.
Hiçbir MCP aracı KPI silmez veya düzenlemez (Last9 kullanıcı arayüzünü kullanın); bu nedenle oluşturmadan önce adı, sorguyu ve birimi onaylayın. Bir kez oluşturun ve döndürülen kimliği expression_args / indicators_used için saklayın; ad çakışmasında mevcut KPI'nın kimliğini get_entity_kpis üzerinden yeniden kullanın. Zaman aşımı veya bağlantı hatasında oluşturma işlemi uygulanmış da uygulanmamış da olabilir: yeniden denemeden önce ada göre get_entity_kpis ile kontrol edin. {"id","name","query","unit"} döndürür.
get_alerts
time_iso(string, isteğe bağlı): RFC3339 biçiminde değerlendirme zamanı.window(integer, isteğe bağlı): Saniye cinsinden geriye dönük aralık. Varsayılan: 900. Aralık: 60–86400.lookback_minutes(integer, isteğe bağlı): Aralık: 1–1440.
get_alert_rule_state
start_time(integer veya string, zorunlu): Aralığın başlangıcı (dahil): Unix epoch saniyesi (1718000000) veya RFC3339 (2024-06-10T06:13:20Z). Epoch milisaniye, mikrosaniye ve nanosaniye değerleri saniyeye dönüştürülür; 2000-01-01 öncesindeki değerler reddedilir.end_time(integer veya string, zorunlu): Aralığın sonu (dahil), aynı biçimlerde.step(integer, zorunlu): Örnekler arasındaki saniye cinsinden çözünürlük. Örnek sayısı((end_time - start_time) / step + 1)en fazla 100 ile sınırlıdır. Her örnek, zaman damgasında sona erenmin(step, 3600)saniyelik aralığı kapsayan tek bir üst akış çağrısıdır; örnekler 5'erli gruplar halinde alınır ve 60 saniyeden uzun sürmeleri durumunda araç yeniden deneme yönergesi içeren bir hata döndürür.alert_group_id(string, isteğe bağlı): Uyarı grubu kimliğine göre filtrele.rule_name(string, isteğe bağlı): Kural adına göre regex filtresi.alert_group_name(string, isteğe bağlı): Uyarı grubu adına göre regex filtresi.label_filters(string, isteğe bağlı): Virgülle ayrılmışkey=valueetiket filtreleri.state(string, isteğe bağlı): Duruma göre filtrele (ör.firing).
rule_id -> [{timestamp, is_firing}] değerlerinden oluşan bir JSON eşlemesi döndürür. Bir kuralın üst akış yanıtında bulunmadığı zaman damgası is_firing=0 olarak bildirilir — bu, "tetikleniyor olarak gözlemlenmedi" anlamına gelir; durumun normal olduğunun doğrulandığı anlamına gelmez.
get_alert_hygiene
Etkin uyarı kurallarının salt okunur denetimi. Hiçbir şeyi değiştirmez: önerilen her düzeltme bir tekliftir ve yalnızca kullanıcı açıkça onayladıktan sonra, sunuluyorsa update_alert (ayar yapma), patch_alert (is_disabled), delete_alert veya attach_notification_channel üzerinden uygulanır.
window(string, isteğe bağlı):7dveya30d. Varsayılan:7d.limit(integer, isteğe bağlı): En kötü durumdakiler önce gelecek şekilde döndürülecek işaretli kural sayısı üst sınırı. Varsayılan: 20. Aralık: 1–100.
Pencere şimdi sona erer. Kategoriler (bir kural birden fazla kategoriye girebilir): noisy (< 20% acked; with an unavailable ack_rate it is judged on fire rate alone and the reason says so; mute time is not reported), flapping (> ile günde ≥ 5 tetiklenme, günde 4 dalgalanma), stale (pencereden önce son kez tetiklenmiş ve pencere içinde tetiklenme zamanı yok ya da yaşam döngüsü coverage tamamlanmış ve API listesi kesilmemişken pencere içinde olayı olmayan etkin, yapılandırılmış bir kural), unrouted (pencere içindeki hiçbir tetiklenme bir kanala ulaşmamış ve uyarı grubuna şu anda bağlı kanal yok; ekler okunamıyorsa kural bunun yerine unavailable.routed altında sayılır). Her istatistik {status, count|value, reason} veya null değerindedir: kullanılamayan bir değer hiçbir zaman sıfır olarak yorumlanmaz ve yalnızca o değere ihtiyaç duyan denetimi atlar; unavailable, eksik her değer için etkin kuralların sayısını verir (fire_count, flap_count, ack_rate, routed, uyarı kuralları listesinde bulunmayan kurallar için rule_config — bu kuralların düzeltmelerinde güncel değer bulunmaz — ve sessizliğini geçmişin kanıtlayamadığı, olayı olmayan yapılandırılmış kurallar için activity; bunlar değerlendirilmez). coverage, uyarı geçmişinin pencerenin ne kadarını kapsadığını belirtir; oranlar en az bir gün olmak üzere kapsanan süre üzerinden hesaplanır. upstream_truncated, API yalnızca en gürültülü 200 kuralı döndürdüğünde true olur; bu nedenle daha sessiz kurallar değerlendirilmemiştir. Her kuralın uyarı kuralları listesindeki yapılandırmasından oluşturulan düzeltmeler: bad_minutes değerini yükseltin (count_true(result) >= N içindeki N) veya eval_window süresini uzatın (en fazla 60 dakika); gürültülü statik eşikler için eşiği condition (expr > 100) içinde değiştirin veya ifadeyi adaptive_std_cmp(metric, sensitivity, window) olarak değiştirin; bir bildirim kanalı ekleyin; eski kuralları devre dışı bırakın veya silin.
32 KB hedef boyutuna göre ayarlanmış kompakt JSON {window, from, to, coverage, upstream_truncated, rules_evaluated, flagged_rules, truncated, omitted_for_size, unavailable, rules} döndürür: işaretli kurallar limit sınırını veya bu hedefi aştığında truncated true olur ve boyut nedeniyle limit sınırından çıkarılan kuralların sayısını omitted_for_size verir (en kötü durumdaki kural her zaman tutulur; bu nedenle 32 KB'den büyük tek bir kural tek başına döndürülür ve hedefi aşar); her kuralda findings (category, reason, suggested_fix, isteğe bağlı alternative_fix) ve ham stats bulunur.
get_notification_channels
scope(string, isteğe bağlı):attached(varsayılan), uyarı grubu eki başına bir satır döndürür;id,detach_notification_channeltarafından alınan ek kimliğidir.channels, kuruluşun kanallarını döndürür (id,name,type,send_resolved,created_via);id,attach_notification_channeltarafından alınan kanal kimliğidir. Hedefler, üstbilgiler ve sertifikalar hiçbir zaman döndürülmez.
Yapılandırılmış bildirim kanallarını (Slack, PagerDuty, e-posta, web kancaları vb.) TSV tablosu olarak döndürür. Ek satırlarında (service_fqid ayarlanmış) global false ve services - gösterilir; services yalnızca eski hizmet bağlamalarını listeler. Ek satırlarında send_resolved, teslimat sırasında kullanılan değeri değil, satırda saklanan varsayılanı gösterir; çözüm bildirimleri kanalın kendi send_resolved (scope=channels) ayarını izler. Her iki kapsam da created_via içerir (MCP aracısının oluşturduğu satırlar için last9-mcp, aksi halde -).
recommend_alert_config
Salt okunur. Yaşam döngüsü yönergelerini, doğrulama kapılarını ve müdahale bağlamı gereksinimlerini döndürür; tek başına kanıt değildir, bu nedenle eşikleri telemetri araçlarıyla temellendirin.
signal(string, zorunlu): Birim ve boyutları içeren metrik veya kullanıcı etkisi sinyali.objective(string, zorunlu): Algılanacak belirti veya kullanıcı etkisi.rule_type(string, isteğe bağlı):static(varsayılan) veyaanomaly.severity(string, isteğe bağlı):breach(varsayılan) veyathreat.environment(string, isteğe bağlı): Ortam ve trafik profili.
validate_alert_expression
Bir ifadeyi kaydetmeden deneme amaçlı çalıştırır. create_alert / update_alert öncesinde kullanın.
entity_id(string, zorunlu): Uyarı grubu/varlık UUID'si.expression(string, zorunlu): KPI'ların tam adlarıyla belirtilen göstergeler üzerinde aritmetik ifade; ör.errors / requests. En fazla 3 gösterge. Boşluk, nokta veya tire içeren adları olduğu gibi yazın (Test Alert / errors);create_alertbunları tam olarak bu şekilde kaydeder.indicators_used(object, zorunlu, boş olamaz): Gösterge adındanentity_idtarafından sahip olunan KPI UUID'sine eşleme; grubun KPI kimliklerini ve adlarınıget_entity_kpisile listeleyin. Her KPI'nın tam adını kullanın: bu deneme çalıştırması herhangi bir adı kabul eder, ancakcreate_alertveupdate_alert, bağlı KPI'nın adı olmayanexpression_argsanahtarlarını reddeder. Yalnızca aritmetik ifade denetlenir (biradaptive_std_cmp(...)sarmalayıcısını değil, iç metrik ifadesini iletin);condition/alert_conditiondenetlenmez. En az bir zaman serisi denetimi yalnızca birden fazla gösterge kullanıldığında çalışır.
{"valid":true} veya {"valid":false,"reason":"..."} döndürür; geçersiz bir ifade normal bir sonuçtur, araç hatası değildir.
describe_alert_chart
Salt okunurdur. Kapsam dahilindeki bir Discover grafiğindeki uyarı verilebilir sinyalleri (key, unit, eval_query, query_kind) listeler. Viewer rolündeki belirteçler reddedilir.
surface(string, zorunlu):discover-serviceveyadiscover-exceptions; özel panolar dahil diğer tüm yüzeyler API çağrılmadan önce reddedilir (bunun yerine KPI ilecreate_alertkullanın).chart_key(string, zorunlu): ör.apdex,error_rate,response_time,exception_count.service_name(string, zorunlu)env(string, isteğe bağlı)attributes(object, isteğe bağlı): Bu aracın bildirdiği anahtar adlarını kullanarak ek kimlik boyutları.
create_alert
Mevcut bir uyarı grubunda, her zaman devre dışı bir kural oluşturur (is_disabled=false iletilse bile taslak olarak). Önce recommend_alert_config çağrısını yapın, ardından yalnızca kullanıcı onayladıktan sonra patch_alert is_disabled=false ile etkinleştirin. Bir kez oluşturun ve döndürülen kural kimliğini saklayın. Uyarı grubunun zaten kullandığı bir rule_name (büyük/küçük harfe duyarsız) varsa, hiçbir şey oluşturmadan reddedilir ve mevcut kuralın kimliği belirtilir.
entity_id(string, zorunlu): Uyarı grubu/varlık UUID'si.alert_rule(object, zorunlu):primary_indicatorveexpression_argsdahil, varlığın gerçek KPI'larına bağlı eksiksiz, türü belirtilmiş kural gövdesi. Herexpression_argsanahtarı, bağlandığı KPI'nın tam adı olmalıdır (xgibi bir yer tutucu değil);primary_indicatorveexpressionbu adları kullanır. Statik kurallar içincondition,alert_conditionveeval_window(0–60 dakika) gerekir. Uyarlamalı kurallardaexpression=adaptive_std_cmp(<primary_indicator>, sensitivity, window)kullanılır; bu durumda üç alan isteğe bağlıdır (varsayılanlar:expr > 0,count_true(result) >= 1,1).algorithmayarlanamaz. Yanıtlayıcı bağlamıpropertiesiçine eklenir (açıklama, runbook, ek açıklamalar,query_mode).
Bildirim yönlendirmesi kuralda değil, uyarı grubunda yapılandırılır.
create_alert_from_chart
describe_alert_chart ile açıklanan bir grafikten statik eşik kuralı oluşturur. create_alert gibi, kural devre dışı bir taslak olarak oluşturulur ve tetiklenmez; yalnızca kullanıcı onayladıktan sonra patch_alert is_disabled=false ile etkinleştirin. Grafik API'si kuralları etkin olarak oluşturduğundan, araç oluşturma işleminden hemen sonra kuralı devre dışı bırakır; bu işlem başarısız olursa sonuç, canlı olabilecek kuralın kimliğini belirten bir hatadır.
surface/chart_key/service_name/signal_key/name(string, zorunlu)env(string, isteğe bağlı)attributes(object, isteğe bağlı)threshold(number, isteğe bağlı): Sinyalin biriminde; 0 veya daha büyük olmalıdır. Apdex gibi puan birimli sinyaller için açık bir değer gerekir.threshold_operator(string, isteğe bağlı):>(varsayılan),<,>=,<=,==,!=.eval_window(integer, isteğe bağlı): Dakika, 1–60. Varsayılan: 5.bad_minutes(integer, isteğe bağlı): 1–eval_window. Varsayılan: 3.severity(string, isteğe bağlı):breachveyathreat.description(string, isteğe bağlı)group_id(string, isteğe bağlı): Normalde belirtilmez.
update_alert
Bir kuralın değerlendirme yapılandırmasını tamamen değiştirir. Önce get_alert_config veya get_entity_alert_rules ile kuralı alın. Kural mevcut değilse veya başka bir uyarı grubuna aitse hiçbir şeyi değiştirmeden reddedilir. Kuralı geçici olarak silebilir ve yeniden oluşturabilir; bu nedenle sonrasında döndürülen yeni kimliği kullanın.
entity_id(string, zorunlu)id(string, zorunlu): Uyarı kuralı UUID'si.alert_rule(object, zorunlu):create_alertile aynı yapıda eksiksiz yapılandırma.
patch_alert
Kural kimliğini koruyan kısmi değişiklik. En az bir değişiklik gerekir. Kural mevcut değilse veya başka bir uyarı grubuna aitse hiçbir şeyi değiştirmeden reddedilir.
entity_id(string, zorunlu)id(string, zorunlu): Uyarı kuralı UUID'si.is_disabled(boolean, isteğe bağlı):falseetkinleştirir,trueduraklatır.mute_until(integer, isteğe bağlı): Unix epoch son tarihi;0sessizliği kaldırır.properties(object, isteğe bağlı):description,runbook,annotations,query_mode. Gönderilen her alan, saklanan alanın yerini alır; gönderilmeyen veya boş bırakılan alanlar saklanan değerini korur.annotationsharitanın tamamını değiştirir; korumak için tüm anahtarları gönderin;{}haritayı temizler.recurring_mute_schedule(object, isteğe bağlı): Haftalık zamanlamayı değiştirir:enabled(varsayılan false),timezone(IANA adı, zorunlu) vewindows(weekdaysiçinden 1–20 adet,sun..satbiçiminde;start_time/end_timeise 24 saatlikHH:MMbiçiminde). Bitiş saati başlangıç saatine eşit veya daha erkense zamanlama ertesi gün sona erer. Korumak için tüm zaman aralıklarını gönderin.clear_recurring_mute_schedule(boolean, isteğe bağlı): Zamanlamayı tamamen kaldırır;recurring_mute_scheduleile birlikte kullanılamaz. Saklanan zaman aralıklarını koruyanenabled=false'den farklıdır.
Viewer rolündeki kullanıcılar yalnızca mute_until değerini değiştirebilir. Grup veya varlık sessize alınmışken kural düzeyindeki sessize alma değişiklikleri reddedilir. Değişiklikleri, mute_until, recurring_mute_schedule ve properties değerlerini gösteren get_entity_alert_rules ile tekrar okuyun.
delete_alert
Bir kuralı kalıcı olarak siler. Önce get_alert_config ile doğrulayın ve kullanıcıdan açık onay alın. Kural mevcut değilse veya başka bir uyarı grubuna aitse hiçbir şeyi silmeden reddedilir.
entity_id(string, zorunlu)id(string, zorunlu): Uyarı kuralı UUID'si.
mute_alert_group
Bir gruptaki mevcut ve gelecekteki tüm kuralları sessize alır; tek bir kuralı sessize almak için mute_until ile patch_alert kullanın. Düzenleyici erişimi gerekir.
entity_id(string, zorunlu): Uyarı grubu/varlık UUID'si.until(integer, zorunlu): Sessizliğin sona ereceği Unix epoch saniyesi.0sessizliği kaldırır;-1gibi negatif bir değer süresiz sessize alır.
acknowledge_alert
Tetiklenen bir uyarının sorumluluğunu üstlenir veya bırakır. Uyarıyı çözmez ya da sessize almaz. Zaten sahip olduğunuz bir uyarıyı onaylamak güvenli bir etkisiz işlemdir. ack, son bir saat içinde get_alerts tarafından tam olarak bu uyarı (üç kimliğin tümü) listelenmedikçe hiçbir kayıt oluşturmadan reddedilir.
alert_group_id/rule_id/rule_type(string, zorunlu):get_alertsiçindeki uyarıdan kopyalayın.action(string, isteğe bağlı):ack(varsayılan) veyaunack. Onayı yalnızca sahip veya kuruluş yöneticisi kaldırabilir.mute_until(integer, isteğe bağlı): Yalnızcaack.mute_alert_groupveyapatch_alertile zaten uyguladığınız sessize alma işlemini kaydeder; hiçbir şeyi sessize almaz.
reassign_alert
Zaten bir sahibi olan uyarıyı başka bir kullanıcıya devreder; sahibi yoksa önce uyarıyı onaylayın. Uyarının sahibi olmadığı için devir gerçekleşmezse, son bir saat içinde get_alerts tarafından bu uyarının listelenip listelenmediğini belirtir. Last9 yeni sahibine bildirim göndermez.
alert_group_id/rule_id/rule_type(string, zorunlu):get_alertsiçindeki uyarıdan kopyalayın.owner_email(string, isteğe bağlı): Tercih edilen seçenek; etkin kuruluş kullanıcıları arasında büyük/küçük harfe duyarsız eşleştirilir.owner_user_id(string, isteğe bağlı):owner_emailveyaowner_user_idseçeneklerinden tam olarak birini belirtin.
create_notification_channel
Bir kanal oluşturur; attach_notification_channel ile ilişkilendirilene kadar hiçbir yere yönlendirme yapmaz. Bir kez oluşturun ve kimliğini saklayın; güncelleme aracı yoktur. Yalnızca id, name, type ve send_resolved değerlerini döndürür.
name(string, zorunlu): Tür başına benzersiz olmalıdır; iki nokta üst üste içeremez.type(string, zorunlu):slack,pagerduty,opsgenie,emailveyageneric_webhook.destination(string, zorunlu): Slack Incoming Webhook URL'si (veyaslack_app_modeile kanal kimliği), PagerDuty yönlendirme anahtarı, Opsgenie API anahtarı, yalnızca kuruluşun alan adıyla sınırlı olmayan, virgülle ayrılmış iş e-posta adresleri (API, Gmail gibi kişisel sağlayıcı adreslerini reddeder; kişisel bir hesapla oturum açmış bir kuruluş yalnızca yöneticisinin adresini kabul eder) veya bir HTTPS webhook URL'si.slack_app_mode(boolean, isteğe bağlı): Yalnızca Slack için. Varsayılan: false.mention_handles(string, isteğe bağlı): Virgülle ayrılmış; ör.user|U123ABC|name,special|here,special|channel.webhook_headers(object, isteğe bağlı): Yalnızcageneric_webhook.webhook_ca_certificate(string, isteğe bağlı): Yalnızcageneric_webhook; en fazla 64 KiB boyutunda tek bir PEM CA sertifikası.send_resolved(boolean, isteğe bağlı): Varsayılan: true.
attach_notification_channel
Mevcut bir kanalı tek bir uyarı grubuna yönlendirir. Yinelenen çağrılarda aynı sonucu verir. Ekler, kanalın teslimat ayarlarını (başlıklar, sertifika, bahsetmeler) ekleme anında kopyalar; kanal ayarları daha sonra değişirse yeniden ekleyin.
channel_id(integer, zorunlu): Bir kanal kimliği (scope=channelsileget_notification_channels), ek kimliği değil.alert_group_id(string, zorunlu):get_alert_groupsiçinden.severity(string, zorunlu):breach,threatveyaboth.bothiki ek oluşturur; ikincisi başarısız olursa ilki ekli kalır ve hata, yeniden denenmesi gereken önem derecesini belirtir.
detach_notification_channel
Bir eki kaldırır. Silme kapsamlı bir belirteç gerekir; yazma kapsamlı bir belirteçle ek kaldırılamaz.
attachment_id(integer, zorunlu):scope=attachedileget_notification_channelsiçinden alınanid. Kanal kimlikleri reddedilir.alert_group_id(string, isteğe bağlı): Ek farklı bir gruba aitse işlem reddedilir.
delete_notification_channel
Eki olmayan bir kanalı kalıcı olarak siler; önce eklerini kaldırın. Silme kapsamlı bir belirteç gerekir. Kanalları yeniden listeleyerek silme işlemini doğrular.
channel_id(integer, zorunlu):scope=channelsileget_notification_channelsiçinden alınanid. Ek kimlikleri reddedilir.
did_you_mean
query(string, zorunlu): Aranacak ad — kısmi, yanlış yazılmış veya kısaltılmış olabilir.type(string, isteğe bağlı): Varlık türüne göre sınırlandırın:service,environment,host,database,k8s_deployment,k8s_namespace,job.
Benzerlik puanlarıyla en yakın 3 eşleşmeye kadar sonuç döndürür. Varlık adının belirsiz olduğu tüm araç çağrılarından önce bunu kullanın. Önceki bir çağrı boş sonuç döndürdüyse yeniden denemeden önce bunu kullanın.
get_service_profile
service_name(string, zorunlu): Telemetri profili çıkarılacak hizmet.datasource(string, isteğe bağlı): Veri kaynağı adı. Varsayılan için belirtmeyin; yaklaşık bir ad, Prometheus araçlarındaki gibi çözümlenir.
Kısa bir inceleme özeti ve ardından ham JSON olarak tam profili döndürür: sinyal varlığı (logs/traces/metrics değerlerinden present, absent veya unknown olarak), dil ve çalışma zamanı, dağıtım ortamları, günlük signal_shape (log_format, severity_set, level_field, trace_context_in_logs) ve uygulanabildiği durumlarda önerilen bir alım düzeltmesi. Arka uç freshness bildirdiğinde özet, freshness.logs.last_seen ve freshness.traces.last_seen değerlerini içeren bir last seen satırı (RFC3339 veya null olduğunda none) ve freshness.traces_stale değeri true olduğunda bir traces stale uyarısı ekler: günlükler devam ederken span'ler durmuş; bu nedenle eksik kurulum yerine freshness.traces.last_seen çevresindeki bir gerileme araştırılmalıdır. Üst kaynaktan türetilir ve yaklaşık 15 dakikalık TTL ile önbelleğe alınır.
Araç seçiminin hizmetin gerçek telemetrisine uyması için hizmet kapsamındaki herhangi bir incelemeden önce bunu çağırın — traces değeri absent ise iz araçlarını atlayın; severity_set değeri none veya partial olduğunda ise severity_filters kullanmak yerine günlük gövdesindeki level_field değerinden önem derecesini ayrıştırın. metrics her zaman unknown değerindedir ve v1'de dependencies doldurulmaz. logs ve traces değerlerinin ikisi de absent olduğunda, hizmetin izlenmediği sonucuna varmadan önce adı did_you_mean ile doğrulayın.
list_dashboards
name(string, isteğe bağlı): Pano adında büyük/küçük harfe duyarsız alt dize. Listeyi daraltır vetotal.limit(integer, isteğe bağlı): Sayfa başına pano sayısı, 1–200. Varsayılan: 100.cursor(string, isteğe bağlı): Önceki sayfanınnext_cursordeğeri; bununla birlikte aynınamedeğerini gönderin.
En son güncellenenler önce gelecek şekilde {"dashboards": [{"id", "name", "updated_at", "created_by", "locked"}], "total", "next_cursor"} döndürür. Boş olduğunda created_by atlanır; API readonly bildirmediğinde locked atlanır. updated_at, dize olarak Unix epoch saniyeleridir. 32 KB sınırının altında kalmak için sayfa erken sona erebilir; son sayfada next_cursor bulunmaz.
get_dashboard
id(string, zorunlu): Pano UUID'si.region(string, isteğe bağlı): Panel sorgularının doldurulacağı bölge. Varsayılan olarak yapılandırılmış veri kaynağı bölgesi kullanılır.
Sonuç, üst düzey locked (false, API bunu sağlamadığında) ve created_by (yazarın kullanıcı kimliği) alanlarını ekler.
Bir panelde uyarı oluşturmak için last9://reference/alerting bölümüne bakın.
validate_dashboard
Salt okunur. Panoları hiçbir zaman oluşturmaz veya güncellemez. dashboard_id ya da dashboard_definition değerlerinden tam olarak birini kabul eder.
dashboard_id(string, isteğe bağlı): Doğrulanacak kayıtlı pano UUID'si.dashboard_definition(object, isteğe bağlı): Satır içi, kaydedilmemiş pano gövdesi (gerçek bir deneme çalıştırması).{dashboard, metadata}oluşturma zarfı, içindekidashboardnesnesine açılır.start_time_iso/end_time_iso(string, isteğe bağlı): Doğrulama aralığı (RFC3339). ≤ 24 saat olmalıdır.region(string, isteğe bağlı): Panel sorgularının yürütüleceği bölge.
dashboard_validation/v1 döndürür: panel başına lint + yürütme sınıflandırması (data / no_data / invalid / error). İlk gün boş sonuçlar, tanılama probları olmadan valid_no_data olarak sınıflandırılır. Panel içermeyen bir pano, error: "no_panels" ile birlikte success: false döndürür. Diğer biçimlerdeki panel alanları (Grafana gridPos, title, type ve sorgu gerektiren panellerde targets) ile yanlış türdeki alanlar her panel için shape_problems içinde listelenir, summary.panels_invalid_shape sayısına dahil edilir ve overall değerini fail yapar.
preview_dashboard
Salt okunur, istemci tarafı önizleme. Ya dashboard (oluşturma isteğindeki kaydedilmemiş pano nesnesi) ya da id ile birlikte ops ( patch_dashboard ile aynı sıralı işlemler) değerlerini gönderin. Zorunlu start_time_iso ve end_time_iso, en fazla 24 saatlik bir aralığı kapsayan RFC3339 zaman damgalarıdır. İsteğe bağlı variables, skaler geçersiz kılma değerlerini içerir; aksi durumda pano değerleri ve yerleşik varsayılanlar uygulanır.
{
"id": "dashboard-id",
"ops": [{"op": "update_panel", "panel_id": "panel-id", "fields": {"name": "Request latency"}}],
"start_time_iso": "2026-10-01T08:00:00Z",
"end_time_iso": "2026-10-01T09:00:00Z"
}
saved: false, tanım/sorgu validation özeti (oluşturma şeması uyuşmazlığı için definition_error dahil) ve ok / empty / error durumunu, çözümlenmiş sorguları ve hedef tanılamalarını içeren panels döndürür. PromQL ve LogJSON yürütülür; desteklenmeyen sorgu türleri ve çözümlenmemiş değişkenler paneli hatalı duruma getirir. Geçerli sorgu içermeyen paneller ok; geçersiz panel tanımları ise error olur. Yama diff, net panels_added, panels_changed (taşımalar dahil) ve panels_removed değişikliklerini, ayrıca sıralı işlem değişikliklerini içerir. Panelleri kimlikler ve sıfır tabanlı dizinler tanımlar; kaldırılan dizinler özgün panoya aittir. Kaydedilen panellerin kimlikleri boş olmamalı ve birbirinden farklı olmalıdır.
Sınırlar: 50 panel, 100 sorgu, 100 işlem, hem girdi hem de aday pano için 65536 JSON baytı ve 60 saniyelik yürütme süresi. 65536 JSON baytını aşan çözümlenmiş sorgular yürütme öncesinde reddedilir. Kanıt, hedef başına en fazla üç örnek ve 1024 JSON baytı tutar; örnekler atlandığında truncated: true eklenir. 262144 baytı aşan JSON raporu, girdiyi azaltmaya yönelik yönergelerle birlikte başarısız olur.
Hiçbir pano oluşturulmaz veya güncellenmez. Bu işlem, adayı oluşturma şemasına ve mevcut doğrulayıcıyı kullanarak sorgulara göre denetler; arka ucun kabulünü veya görüntülemeyi garanti etmez. Arka uç tarafından atanan kimlikler, varsayılanlar, atılan alanlar veya eşzamanlı düzenlemeler kaydedilen sonucu değiştirebilir. Önizleme, yazma işlemiyle aynı yerel yama işlemlerini ve panel sürümü varsayılanlarını kullanır.
create_dashboard
Yalnızca yeni pano oluşturmak için kullanılır. Bu çağrı dashboard.id döndürdükten sonra panelleri patch_dashboard ile düzenleyin (veya yapıyı update_dashboard ile yeniden düzenleyin) — panel eklemek, kırpmak ya da düzeltmek için yeniden oluşturmayın.
dashboard(object, zorunlu):namevepanels[]içeren pano tanımı. Her panel içinname,version,layout(x,y,w,h),visualization.typevequeries[]gerekir.metadata(object, isteğe bağlı): Pano meta verileri —_categoryve_typealanları (ör.{"_category":"custom","_type":"metrics"}).
update_dashboard
Bir panonun büyük bölümünü yeniden yapılandırmak için kullanın; tek tek paneller eklemek, düzenlemek, kaldırmak veya taşımak için patch_dashboard kullanın. Kimliğe göre tam değiştirme (oluşturmayla aynı gövde): her panel yeniden gönderilmelidir.
id(string, zorunlu): Güncellenecek pano UUID'si.dashboard(object, zorunlu): Tam değiştirme pano gövdesi (oluşturmayla aynı biçim).metadata(object, isteğe bağlı): Değiştirilecek meta veriler. Salt okunur sistem panoları kurtarılabilir bir araç hatası döndürür.
patch_dashboard
Küçük iyileştirmeler için bunu update_dashboard yerine tercih edin: değişmeyen paneller yeniden gönderilmez. Panoyu okur, ops işlemlerini sırayla uygular ve geri yazar; bu nedenle okuma ile yazma arasında başka bir yerde yapılan düzenlemenin üzerine yazılır. {dashboard_id, changes[]} döndürür; panonun zaten karşıladığı işlemler sonuçtan çıkarılır ve hiçbir işlem değişiklik yapmıyorsa hiçbir şey yazılmaz. Fark, yazma işleminden sonra yeniden okunan pano ile karşılaştırılarak denetlenir: panel fields saklanan değerleri gösterir, not_stored API'nin attığı anahtarları listeler ve not_removed bir null olmasına rağmen API'nin koruduğu anahtarları listeler. 200 karakteri aşan fark değerleri, JSON türleri korunarak yerinde kısaltılır.
id(string, zorunlu): Yama uygulanacak pano UUID'si.ops(array, zorunlu): Sırayla uygulanan işlemler; herhangi biri geçersizse hiçbir şey yazılmaz ve hata, geçersiz işlemiops[i]olarak belirtir.add_panel:panel(tam panel nesnesi;versionvarsayılan olarak 1 olur), isteğe bağlıindex(0 tabanlı ekleme konumu, varsayılan olarak sona eklenir).update_panel:panel_id,fields(değiştirilecek üst düzey panel anahtarları;nullbir anahtarı kaldırır;iddeğiştirilemez).remove_panel:panel_id.move_panel:panel_id,index(taşıma sonrası 0 tabanlı konum).set_title:title(pano adı).set_variable:variable; aynıtargetdeğerine sahip değişkeni değiştirir, yoksa sona ekler.
delete_dashboard
id(string, zorunlu): Silinecek pano UUID'si. Salt okunur sistem panoları silinemez.
set_dashboard_lock
id(string, zorunlu): Pano UUID'si.locked(boolean, zorunlu):truepanoyu kilitler,falsekilidini açar.
Yazma aracı; yalnızca kullanıcı açıkça istediğinde çağırın. Panoyu yalnızca yazarı veya kuruluş yöneticisi kilitleyebilir ya da kilidini açabilir; yerleşik panolar her zaman salt okunurdur. Ortaya çıkan durumla birlikte {"id", "locked"} döndürür. Pano kilitliyken update_dashboard, patch_dashboard ve delete_dashboard hiçbir yazma isteği göndermez ve yazarın adını belirten, kilidin açılmasını veya panonun create_dashboard ile kopyalanmasını öneren dashboard is locked ile başlayan kurtarılabilir bir araç hatası döndürür.
list_dashboard_snapshots
dashboard_id(string, zorunlu): Anlık görüntüleri listelenecek pano UUID'si.
Yalnızca meta verileri döndürür (id, name, expires_at vb.). Dondurulmuş panel verileri için get_dashboard_snapshot kullanın.
get_dashboard_snapshot
id(string, zorunlu): Anlık görüntü UUID'si.
dashboard_definition, panel_data, time_range ve variables dahil olmak üzere dondurulmuş anlık görüntünün tamamını döndürür.
delete_dashboard_snapshot
id(string, zorunlu): Silinecek anlık görüntü UUID'si.
get_profile_services
lookback_minutes/start_time_iso/end_time_iso(isteğe bağlı): Zaman aralığı; geriye dönük süreyi veya açık ISO sınırlarını tercih edin (varsayılan 60m).region(string, isteğe bağlı): Bölge geçersiz kılma değeri.
Belirtilen zaman aralığında profil verisi bulunan hizmetleri döndürür. get_flamegraph / get_top_functions / get_profile_summary öncesinde çağırın.
get_flamegraph
service(string, zorunlu):get_profile_servicesiçinden hizmet adı.profile_type(string, isteğe bağlı):cpu(varsayılan),allocveyawall. Zaman aralıklarını karşılaştırırken bir tür sabitleyin.env/cluster/namespace/runtime(string, isteğe bağlı): Kapsam filtreleri.limit(number, isteğe bağlı): En fazla toplu yığın satırı sayısı (varsayılan 1000, en fazla 10000).lookback_minutes/start_time_iso/end_time_iso/region(isteğe bağlı).
İç içe bir alev grafiği ağacı döndürür (name / value / self / children). truncated: true, API satır sınırına ulaşıldığı anlamına gelir.
get_top_functions
get_flamegraph ile aynı filtreler. En sıcak işlevlerin öz örnek sıralamasını döndürür. Sonuç kesilmiş olabilir; truncated değerini kontrol edin.
get_profile_summary
get_flamegraph ile aynı filtreler. Hizmet profili için kısa, doğal dilli bir önceliklendirme özeti döndürür.
grafana_search_dashboards
query(string, isteğe bağlı): Başlık alt dizesi. Boş bırakıldığında geniş kapsamlı listeleme yapar (5.000 satır sınırına tabidir).
uid, title, uri, url, type ve tags içeren {"dashboards":[…], "truncated":bool} döndürür. grafana_get_dashboard ile birlikte uid kullanın.
grafana_get_dashboard
uid(string, zorunlu): Grafana pano uid'si.full_json(boolean, isteğe bağlı): true olduğunda, filtrelenmiş özet yerine ham Grafana JSON'u döndürür.
Varsayılan özet: sürüm, etiketler, şablon değişkenleri ve her panelin türü/veri kaynağı/gridPos/promQL hedefleri. Bilinmeyen eklenti panel türleri unsupportedPanelTypes içinde görünür.
grafana_list_folders
Parametre yok. Klasör ağacını döndürür.
grafana_list_folder_dashboards
folder_uid(string, required): Grafana klasörünün uid değeri.
Bu klasördeki panolar için {"dashboards":[…], "truncated":bool} döndürür (sayfalama ile en fazla 5.000).
grafana_list_datasources
Parametre yok. Veri kaynaklarının güvenli bir görünümünü döndürür (kimlik bilgisi alanları yoktur).
Test
Uygulama testlerini çalıştırmadan test goroutine analiz aracını çalıştırın:
make lint-test
Bu, Go'nun testinggoroutine analiz aracını tüm paketlerde, *_test.go dosyaları da dahil olmak üzere çalıştırır ve sonucu güvenli olmayan ve güvenli fixture'larla karşılaştırır. Her iki CI test iş akışı da go vet -testinggoroutine ./... komutunu ayrı bir adım olarak çalıştırır; böylece önbelleğe alınmış paket test sonuçları lint denetiminin atlanmasına yol açamaz.
Kök paket de analiz aracını test olarak çalıştırır. Bu denetimi önbelleğe almadan tüm test paketini çalıştırmak için go test -count=1 ./... kullanın: Go'nun test önbelleği, analiz aracı alt sürecinin okuduğu dahili paket kaynak dosyalarını izlemez. Düz bir go test ./..., bu dosyalar değiştikten sonra kök testin başarılı sonucunu yeniden kullanabilir.
testing.T veya testing.B üzerinde Fatal, Fatalf ve FailNow işlemleri üst test goroutine'inde çalışmalıdır. Worker'lar, üst testin doğrulayabilmesi için hataları geri göndermelidir:
errs := make(chan error, 1)
go func() { errs <- doWork() }()
if err := <-errs; err != nil {
t.Fatal(err)
}
Analiz aracı, go func closure'larındaki doğrudan çağrıları yakalar; rastgele yardımcı çağrıların arkasına gizlenmiş doğrulamaları denetleyen genel bir yordamlar arası kontrol değildir. Entegrasyon testleri yalnızca TEST_REFRESH_TOKEN ayarlanmışsa çalışır.
