Simple Log Service, iki sürüm uyarı şablonu sözdizimini destekler: yeni ve orijinal. Yeni sözdizimi, Python benzeri bir yaklaşım kullanarak uyarı bildirimlerinin daha esnek ve gelişmiş özel şekilde işlenmesini sağlar.
Genel Bakış
Orijinal uyarı şablonlarına kıyasla yeni uyarı şablonları, Markdown karakter kaçış dizileri gibi özelliklerle bildirim içeriğini ve stillerini optimize etmek için daha esnek özel işleme mantığı sağlayan Python benzeri bir sözdizimi kullanır. Başlıca avantajlar şunlardır:
Uyarı önem derecelerine göre dinamik işleme; farklı renkli yazı tipleri kullanarak önem derecelerini ayırt eder.
Uyarı sorgusu sonuçlarının e-postada bir liste veya tablo olarak yinelemeli şekilde işlenmesi.
Base64 kodlama/kod çözme ve sayısal değerler üzerinde aritmetik işlemler için yerleşik işlevler.
Yeni sözdizimi, orijinal sözdizimiyle tamamen uyumludur ancak uyarı nitelikleri için farklı türler, değerler ve stiller kullanır. Yalnızca yeni sözdizimini kullanmanızı ve ikisini karıştırmamanızı öneririz.
Hızlı başlangıç
Aşağıdaki örnekler, yeni uyarı şablonlarında tanımlanan bildirim içeriğini gösterir.
-
Uyarı içeriği:
{ "alert_id": "test-alert", "alert_name": "PV/UV Alert", "project": "project-1", "status": "firing", "severity": 6, "labels": { "app": "nginx", "host": "host-1" }, "results": [ { "project": "project-1", "logstore": "logstore-1", "query": "* | select count(*) as pv" }, { "project": "project-2", "logstore": "logstore-2", "query": "* | select count(distinct user_id) as uv" } ] } -
Uyarı şablonu yapılandırması:
- Alert ID: {{ alert.alert_id }} - Alert Name: {{ alert.alert_name }} - Project: {{ alert.project }} - Status: {% if alert.status == "firing" %}FIRING{% else %}RESOLVED{% endif %} - Labels: {%- for key, val in alert.labels.items() %} - {{ key }}: {{ val }} {%- endfor %} - Query: {{ alert.results[0].query }} -
Çıktı sonucu:
- Alert ID: test-alert - Alert Name: PV/UV Alert - Project: project-1 - Status: FIRING - Labels: - app: nginx - host: host-1 - Query: * | select count(*) as pv
Temel sözdizimi
Data types
Aşağıdaki tabloda, Python benzeri sözdiziminin desteklediği veri türleri açıklanmaktadır.
|
|
|
|
|
|
|
|
Bir dize tek tırnak ('') veya çift tırnak ("") içine alınmalıdır. Örnekler: "foo" ve 'bar'. Bir dize özel karakterler içeriyorsa, özel karakterlerden kaçınmak için ters eğik çizgi (\) kullanılmalıdır. Örneğin, |
|
|
|
|
|
|
|
|
|
|
|
|
Delimiters
|
Sınırlayıcı |
Kullanım senaryosu |
Örnek |
|
|
Bir değişkenin veya ifadenin başlangıcını ve bitişini işaretler. |
|
|
|
Bir deyimin başlangıcını ve bitişini işaretler. |
|
|
|
Bir yorumun başlangıcını ve bitişini işaretler. Yorumlar uyarı bildirimlerine dahil edilmez. |
|
Removal of empty strings
Varsayılan olarak Simple Log Service, sınırlayıcı ile içindeki ifade arasındaki boşlukları yok sayar. Örneğin, hem {{ 23 }} < {{ 45 }} hem de {{23}} < {{45}} ifadeleri 23 < 45 olarak işlenir. Ancak sınırlayıcıların dışındaki boşluk karakterleri (boşluklar, sekmeler ve satır sonları) korunur. Örneğin, {{ 23 }} < {{ 45 }} ifadesi 23 < 45 olarak işlenir, 23<45 olarak değil.
Bir sınırlayıcının solunda veya sağındaki istenmeyen boşlukları kaldırmak için sınırlayıcının yanına tire (-) ekleyin. Örneğin, {{ 23 -}} < {{- 45 }} ifadesi 23<45 olarak işlenir.
{{-,{{%-ve{#-ifadeleri, sınırlayıcının solundaki tüm boşlukları kaldırır.-}},-%}ve-%}ifadeleri, sınırlayıcının sağındaki tüm boşlukları kaldırır.
Tire (-) ile sınırlayıcı arasında boşluk bırakılamaz. Örneğin,
{{- 3 }}ifadesindeki tire geçerlidir ve sayıyı3olarak işler. Ancak{{ - 3 }}ifadesindeki tire eksi işareti olarak değerlendirilir ve sayıyı-3olarak işler.Tire yalnızca sınırlayıcıların dışındaki boşlukları etkiler, içeriği etkilemez. Örneğin,
{{ "hello " }} {{- "world"}}ifadesihello worldolarak işlenir.
Conditional statements
Koşullu deyimler, işlemeyi kontrol etmek için parametre değerlerini ve mantıksal ifadeleri değerlendirir.
ifyan tümcesinin ardından bir sabit veya değişken gelirse, bu değer true veya false olarak değerlendirilir. Booleanfalse, sayı0, boş dize"",null, boş dizi[]ve boş nesne{}değerleri false olarak değerlendirilir. Diğer tüm değerler true olarak değerlendirilir.ifyan tümcesinin ardından bir mantıksal ifade gelirse, ifade sonucu true veya false olarak değerlendirilir. Örneğin,{{ if alert.severity >= 8 }}ifadesi uyarı önem derecesinin 8 veya daha yüksek olup olmadığını kontrol eder.
Aşağıdaki tabloda desteklenen koşullu akışlar açıklanmaktadır.
|
Kontrol akışı |
Örnek |
|
if |
|
|
if-else |
|
|
if-elif |
|
|
if-elif-else |
|
|
İç içe geçmiş deyim |
|
Iterations
Döngü deyimleri diziler ve nesneler üzerinde yineleme yapar. Aşağıdaki tabloda desteklenen döngü deyimleri açıklanmaktadır.
|
Döngü deyimi |
Örnek |
|
Diziler üzerindeki döngü deyimleri |
|
|
Dizilerde alt simgelerle döngü deyimleri |
enumerate işlevi, dizi alt simgeleri üzerinde yineleme yapar. enumerate işlevi hakkında daha fazla bilgi için bkz. Uyarı şablonlarında yerleşik işlevler.
Alt simgeler varsayılan olarak 0'dan başlar. enumerate işlevinde özel bir başlangıç alt simgesi belirtmek için start parametresini kullanın. Örnek:
|
|
Nesneler üzerindeki döngü deyimleri |
items() işlevi, bir nesneyi yineleme için
|
|
İç içe geçmiş deyimler |
|
Escape characters
Simple Log Service'in {{ gibi özel karakter dizelerini ayrıştırmasını önlemek için bunlardan kaçabilirsiniz. Aşağıdaki örnek, {% raw %} ile {% endraw %} arasındaki tüm içeriği olduğu gibi korur:
-
Uyarı şablonu yapılandırması
{% raw %} {% for result in alert.results %} {{ result }} {% endfor %} {% endraw %} -
Sonuç
{% for result in alert.results %} {{ result }} {% endfor %}
Functions
Uyarı şablonları, bildirim biçimlerini ve stillerini esnek bir şekilde yapılandırmak için yerleşik işlevler sağlar. Daha fazla bilgi için bkz. Şablonlarda yerleşik işlevler.
Örneğin, bir Webhook URL'si kullanarak uyarı bildirimlerini JSON biçiminde göndermek için aşağıdaki şablon yapılandırmasını kullanın:
-
Satır sonu içeren sorgu deyimi
* | select count(*) as cnt -
Farklı uyarı şablonu yapılandırmalarının karşılaştırılması
Öğe
Uyarı şablonu
Sonuç
Açıklamalar
İşlev kullanılmadı
{ "query": "{{ alert.results[0].query }}" }{ "query": "* | select count(*) as pv" }JSON biçimi geçersiz.
quote işlevi kullanıldı
{ "query": {{ quote(alert.results[0].query) }} }{ "query": "* | \nselect count(*) as pv" }JSON biçimi geçerli.
Filters
{{ block(to_list(alert.labels)) }} gibi iç içe geçmiş işlevlerin okunması zorlaştığında filtreleri kullanabilirsiniz. Filtreler dikey çubukları (|) operatör olarak kullanır ve yöntem zincirlemesini destekler. Filtreleri {{ xxx | filiter1 | filter2 | ... }} biçiminde belirtin. Örneğin, {{ blockquote(to_list(alert.labels)) }} ifadesi {{ alert.labels | to_list | blockquote }} ifadesine eşdeğerdir.
Bir yerleşik işlevle filtreleri kullanmadan önce işlevin filtreleri destekleyip desteklemediğini doğrulayın. Yeni uyarı şablonlarında bulunan çoğu yerleşik işlev filtreleri destekler. Daha fazla bilgi için bkz. Şablonlarda yerleşik işlevler.
Bir yerleşik işlevin parametresi yoksa filtreler kullanılamaz.
Bir yerleşik işlevin tek bir parametresi varsa filtre sözdizimini kullanmanızı öneririz. Biçim
{{ arg | fn }}şeklindedir. Örneğin,{{ abs(-1) }}ifadesi{{ -1 | abs }}ifadesine eşdeğerdir.Bir yerleşik işlevin birden çok parametresi varsa ve ilk parametre dışındakilerin varsayılan değerleri varsa filtreler kullanılabilir. Tüm parametreler için değerler belirtmeniz gerekiyorsa filtreler yerine işlevi doğrudan çağırmanızı öneririz.
Operators
Aşağıdaki tabloda desteklenen operatörler açıklanmaktadır. Operatör öncelikleri hakkında daha fazla bilgi için bkz. Operatör önceliği.
|
Kategori |
Operatör |
Açıklama |
|
Aritmetik işlemler |
+ |
Toplama işlemi gerçekleştirir. |
|
- |
Çıkarma işlemi gerçekleştirir. |
|
|
* |
Çarpma işlemi gerçekleştirir. |
|
|
/ |
Bölme. Ondalık sayı döndürür. |
|
|
// |
Bölme. Tamsayı döndürür. |
|
|
% |
Mod alma işlemi gerçekleştirir. |
|
|
Karşılaştırma işlemleri |
== |
Bir değerin başka bir değere eşit olup olmadığını değerlendirir. |
|
!= |
Bir değerin başka bir değere eşit olup olmadığını değerlendirir. |
|
|
> |
Bir değerin başka bir değerden büyük olup olmadığını değerlendirir. |
|
|
>= |
Bir değerin başka bir değerden büyük veya ona eşit olup olmadığını değerlendirir. |
|
|
< |
Bir değerin başka bir değerden küçük olup olmadığını değerlendirir. |
|
|
<= |
Bir değerin başka bir değerden küçük veya ona eşit olup olmadığını değerlendirir. |
|
|
Mantıksal işlemler |
and |
VE ilişkisini belirtir. |
|
or |
VEYA ilişkisini belirtir. |
|
|
not |
DEĞİL ilişkisini belirtir. |
|
|
Diğer işlemler |
in |
Bir değerin başka bir değerde bulunup bulunmadığını kontrol eder ve bir Boolean değeri döndürür. Dizileri, nesneleri ve dizeleri destekler.
|
|
() |
İşlem kombinasyonunu belirtir. Örnek: {{ a > b and (a > c or b > c) }}. |
Uyarı değişkenleri
Yeni uyarı şablonlarında uyarı değişkenleri alert.xxx biçimini kullanır. Örneğin, alert.project geçerli bir uyarı değişkenidir. Daha fazla bilgi için bkz. Uyarı şablonlarında değişkenler.
Yapılandırma örnekleri
-
Örnek 1: Uyarı durumuna göre uyarı bilgilerini görüntüleyin.
Bir uyarı tetiklendiğinde durum, önem derecesi ve sonuç sağlanır. Bir uyarı temizlendiğinde yalnızca durum sağlanır.
-
Aşağıdaki şablon yapılandırması işlev içermez:
{% if alert.status == "firing" %} - Status: <font color="#E03C39">Firing</font> - Severity level: {{ alert.severity | format_severity }} - Results: {{ alert.results | to_json }} {% else %} - Status: <font color="#72C140">Cleared</font> {% endif %} -
Aşağıdaki şablon yapılandırması işlev içerir:
format_status ve format_severity işlevleri şablon yapılandırmasını basitleştirir:
- Status: {{ alert.status | format_status }} {% if alert.status == "firing" %} - Severity level: {{ alert.severity | format_severity }} - Results: {{ alert.results | to_json }} {% endif %}
-
-
Örnek 2: Uyarı bilgilerini yapılandırılmış bir biçimde görüntüleyin.
Uyarı etiketleri Markdown biçimli bir diziye dönüştürülür.
-
Aşağıdaki şablon yapılandırması işlev içermez:
- Project: {{ alert.project }} - Alert name: {{ alert.alert_name }} - Label: {%- for key, val in alert.labels.items() %} > - {{ key }}: {{ val }} {%- endfor %} -
Aşağıdaki şablon yapılandırması işlev içerir:
to_list ve blockquote işlevleri şablon yapılandırmasını basitleştirir.
- Project: {{ alert.project }} - Alert name: {{ alert.alert_name }} - Label: {{ alert.labels | to_list | blockquote }}
-