Azure İzleyici'de örnek dönüştürmeler

Azure İzleyici'deki dönüştürmeler, gelen verileri Log Analytics çalışma alanına gönderilmeden önce filtrelemenize veya değiştirmenize olanak sağlar. Bu makalede, kendi dönüşümlerinizi oluşturmaya başlamak için kullanabileceğiniz yaygın senaryolara yönelik örnek sorgular sağlanır. Bu dönüştürmeleri test etme ve bunları bir veri toplama kuralına (DCR) ekleme hakkında ayrıntılı bilgi için Azure İzleyici'da dönüştürme oluşturma bölümüne bakın.

Veri maliyetlerini azaltma

Log Analytics çalışma alanına gönderilen tüm veriler için ücretlendirildiğiniz için maliyetlerinizi azaltmak için gerekmeyen verileri filtrelemek istersiniz.

Veri satırlarını filtreleme

Belirli gereksinimlerle eşleşen gelen verileri filtrelemek için bir where deyimi kullanın. Eğer gelen kayıt ifadeyle eşleşmiyorsa, kayıt hedefe gönderilmez. Aşağıdaki örnekte yalnızca önem derecesine Critical sahip kayıtlar toplanır.

source | where severity == "Critical"

Veri sütunlarını filtreleme

Veri alımı maliyetlerinden tasarruf etmek için gerekli olmayan sütunları veri kaynağından kaldırın. Çıkışınızdaki sütunları belirtmek için bir project deyim kullanın veya yalnızca kaldırılacak sütunları belirtmek için kullanın project-away . Aşağıdaki örnekte sütun RawData çıktıdan kaldırılmıştır.

source | project-away RawData

Bir sütundaki önemli verileri ayrıştırma

Önemli verilerin aşırı metinle gömüldüğü bir sütuna sahip olabilirsiniz. Yalnızca değerli verileri tutun ve gerekli olmayan metni kaldırın. İstediğiniz verileri ayrıştırmak için substring ve extract gibi dize işlevlerini kullanın. parse veya split kullanarak da verileri ayrıştırabilir, tek bir sütunu birden çok değere bölebilir ve istediğiniz değeri seçebilirsiniz. Ardından, ayrıştırılmış verilerle yeni bir sütun oluşturmak ve extend özgün sütunu kaldırmak için kullanınproject-away.

Uyarı

Karmaşık ayrıştırma komutlarını kullanmaya ilişkin ipuçları için Büyük ayrıştırma komutlarını ayırma bölümüne bakın.

Aşağıdaki örnekte, RequestContext sütunu çalışma alanının ResourceId'sini içeren JSON verilerini içerir. parse_json ve split işlevleri, çalışma alanının basit adını ayıklamak için kullanılır. Bu değer için yeni bir sütun oluşturulur ve diğer sütunlar kaldırılır.

source
| extend Context = parse_json(RequestContext)
| extend Workspace_CF = tostring(Context['workspaces'][0])
| extend WorkspaceName_CF = split(Workspace_CF,"/")[8]
| project-away RequestContext, Context, Workspace_CF

Satırları temel günlüklere gönder

Verilerinizde temel sorgulama özellikleri gerektiren satırları, daha düşük veri alma maliyeti için temel günlük tablolarına gönderin. Birden çok tabloya veri gönderme hakkında ayrıntılı bilgi için bkz. Birden çok tabloya veri gönderme.

Hassas verileri kaldırma

Gizlilik veya uyumluluk nedeniyle depolanmasını istemediğiniz bilgileri gönderen bir veri kaynağınız olabilir.

Hassas bilgileri filtreleme

Hassas bilgiler içeren satırların veya belirli sütunların tamamını filtrelemek için Veri maliyetlerini azaltma başlığında açıklanan stratejilerin aynısını kullanın. Aşağıdaki örnekte sütun ClientIP çıktıdan kaldırılmıştır.

source | project-away ClientIP

Gizli bilgileri gizleme

IP adresi veya telefon numarasındaki basamaklar gibi bilgileri ortak bir karakterle değiştirmek için dize işlevlerini kullanın. Aşağıdaki örnek, bir e-posta adresindeki kullanıcı adını "*****" ile değiştirir.

source | extend Email = replace_string(Email,substring(Email,0,indexof(Email,"@")),"*****")

Alternatif tabloya gönderme

Hassas kayıtları farklı rol tabanlı erişim denetimi yapılandırmasına sahip alternatif bir tabloya gönderin. Birden çok tabloya veri gönderme hakkında ayrıntılı bilgi için bkz. Birden çok tabloya veri gönderme.

Verileri zenginleştirme

İş bağlamı sağlayan veya daha sonra verileri sorgulamayı basitleştiren verilere bilgi eklemek için dönüştürme kullanın. Dize işlevlerini kullanarak bir sütundan kritik bilgileri ayıklayın ve ardından deyimini extend kullanarak veri kaynağına yeni bir sütun ekleyin. Aşağıdaki örnek, başka bir sütundaki IP adresinin iç mi yoksa dış mı olduğunu tanımlayan bir sütun ekler.

source | extend IpLocation = iff(split(ClientIp,".")[0] in ("10","192"), "Internal", "External")

Verileri normalleştirme

Microsoft Sentinel tarafından kullanılan Gelişmiş Güvenlik Bilgileri Modeli (ASIM) gibi sorgulama ve raporlamayı basitleştirmek için verileri ortak bir şemada normalleştirin. Alma zamanında verileri normalleştirmek için alma zamanı normalleştirmesi bölümünde açıklandığı gibi bir dönüştürme kullanın.

Aşağıdaki örnekte, gelen veriler ASimAuditEventLogs tablosunun normalleştirilmiş şemasına dönüştürülür.

source
| project TimeGenerated = timestamp, EventOwner=owner, EventMessage=message, EventResult=result, EventSeverity=severity

Hedef için verileri biçimlendirme

Hedef tablonun yapısıyla eşleşmeyen bir biçimde veri gönderen bir veri kaynağınız olabilir. Verileri gerekli şemaya yeniden biçimlendirmek için dönüştürme kullanın.

Şemayı değiştirme

Gelen verilerin şemasını hedef tabloyla eşleşecek şekilde değiştirmek için ve extend gibi project komutları kullanın. Aşağıdaki örnekte, geçerli saati döndürmek için KQL işlevi kullanılarak giden verilere adlı TimeGenerated yeni bir sütun eklenir.

source | extend TimeGenerated = now()

Verileri ayrıştırma

Hedef tabloda verileri birden çok sütuna ayrıştırmak için split veya parse işlecini kullanın. Aşağıdaki örnekte, gelen veriler, hedef tablo için ayrı sütunlara ayrılmış adlı RawData virgülle ayrılmış bir sütuna sahiptir. İşleme süresini kısaltmak için büyük ayrıştırma komutlarını ayırma.

source 
| project d = split(RawData,",") 
| project TimeGenerated=todatetime(d[0]), Code=toint(d[1]), Severity=tostring(d[2]), Module=tostring(d[3]), Message=tostring(d[4])

Çok aşamalı dönüştürme örnekleri (önizleme)

Important

Çok aşamalı dönüştürmeler şu anda genel önizleme aşamasındadır. Beta veya önizleme aşamasında olan ya da başka bir şekilde henüz genel kullanıma sunulmamış olan Azure özelliklerinde geçerli olan yasal koşullar için bkz. Microsoft Azure Önizlemeleri için Ek Kullanım Koşulları.

Aşağıdaki örneklerde işlemci tabanlı çok aşamalı dönüşümler gösterilmektedir. Her örnek, DCR tanımının bölümünü gösterir transformations . DCR’nin tam yapısı ve bu dönüşümlere veri kaynakları ile veri akışlarından nasıl başvurulacağı hakkında bilgi için, çok aşamalı dönüşüm oluşturma konusuna bakın.

İstemci tarafında syslog’u facility değerine göre filtreleme

Syslog kayıtlarını ağ üzerinden göndermeden önce yalnızca auth ve authpriv olaylarını saklamak için istemci tarafında filtreleyin.

{
    "name": "client_filter_auth",
    "headerProcessor": {
        "processor": "header.Syslog",
        "configuration": {}
    },
    "processors": [
        {
            "processor": "filter.Basic",
            "configuration": {
                "any": [
                    {
                        "all": [
                            {
                                "columnName": "Facility",
                                "operator": "==",
                                "value": "auth"
                            }
                        ]
                    },
                    {
                        "all": [
                            {
                                "columnName": "Facility",
                                "operator": "==",
                                "value": "authpriv"
                            }
                        ]
                    }
                ]
            }
        }
    ]
}

Windows Olaylarından JSON alanlarını ayrıştırma

Windows Olayları'nın EventData sütunundaki bir JSON yükünden yapılandırılmış alanları ayıklayın.

{
    "name": "client_parse_windows_events",
    "headerProcessor": {
        "processor": "header.WindowsEvents",
        "configuration": {}
    },
    "processors": [
        {
            "processor": "parse.XmlPath",
            "configuration": {
                "columnName": "RawXml",
                "all": [
                    {
                        "path": "/Event/System/EventID",
                        "nameAs": "EventID",
                        "typeAs": "int"
                    },
                    {
                        "path": "/Event/EventData/Data[@Name='SubjectUserName']",
                        "nameAs": "SubjectUserName",
                        "typeAs": "string"
                    }
                ]
            }
        },
        {
            "processor": "map.Drop",
            "configuration": {
                "columnNames": ["RawXml", "RenderingInfo"]
            }
        }
    ]
}

Performans sayaçlarını toplama

5 dakikalık bir süre boyunca değerleri özetleyerek veri hacmini azaltmak için istemci tarafında performans sayacı verilerini toplama.

{
    "name": "client_aggregate_perf",
    "headerProcessor": {
        "processor": "header.WindowsPerformanceCounters",
        "configuration": {}
    },
    "processors": [
        {
            "processor": "aggregate.Basic",
            "configuration": {
                "batchingSettings": {
                    "timeWindow": "5m",
                    "maxBatchRows": 1000
                },
                "aggregates": [
                    {
                        "columnName": "CounterValue",
                        "operator": "avg",
                        "nameAs": "AvgValue"
                    },
                    {
                        "columnName": "CounterValue",
                        "operator": "max",
                        "nameAs": "MaxValue"
                    },
                    {
                        "operator": "count",
                        "nameAs": "SampleCount"
                    }
                ],
                "dimensionColumns": ["CounterName", "Instance"]
            }
        }
    ]
}

Important

Toplama, çıkış şemasını tamamen değiştirir. Toplanan verileri ayrı bir özel tabloya yönlendirme.

Syslog'dan CEF özniteliklerini ayıklama

Genellikle güvenlik cihazı verileri için kullanılan syslog iletilerinden CEF (Ortak Olay Biçimi) özniteliklerini ayıklayın.

{
    "name": "client_parse_cef",
    "headerProcessor": {
        "processor": "header.Syslog",
        "configuration": {}
    },
    "processors": [
        {
            "processor": "parse.CEFAttribute",
            "configuration": {
                "columnName": "Message",
                "all": [
                    {
                        "path": "deviceAction",
                        "nameAs": "DeviceAction",
                        "typeAs": "string"
                    },
                    {
                        "path": "sourceAddress",
                        "nameAs": "SourceIP",
                        "typeAs": "string"
                    },
                    {
                        "path": "destinationAddress",
                        "nameAs": "DestinationIP",
                        "typeAs": "string"
                    }
                ]
            }
        },
        {
            "processor": "enrich.DNSLookup",
            "configuration": {
                "columnName": "SourceIP",
                "nameAs": "SourceDNSName"
            }
        }
    ]
}

Alma zamanı KQL dönüştürmesi

Veri alımı sırasında standart bir akışa KQL ifadesi uygulayın. Bu, eski transformKql özelliğinden bir geçiş yolu sağlar.

{
    "name": "ingestion_kql_syslog",
    "headerProcessor": {
        "processor": "header.StandardStream",
        "configuration": {
            "streamId": "Microsoft-Syslog"
        }
    },
    "processors": [
        {
            "processor": "transform.KQL",
            "configuration": {
                "expression": "source | where SeverityLevel != 'info' | extend EnrichedMsg = strcat(HostName, ': ', SyslogMessage)"
            }
        }
    ]
}

Syslog to CommonSecurityLog iki aşamalı yaklaşım

İki aşamalı bir yaklaşım kullanarak syslog verilerini dönüştürün ve CommonSecurityLog olarak içeri alın. İstemci tarafı dönüşümü CEF özniteliklerini ayrıştırır ve alım tarafı dönüşümü verileri CommonSecurityLog tablosunun şemasına eşler.

İstemci tarafı dönüştürme:

{
    "name": "client_cef_extract",
    "headerProcessor": {
        "processor": "header.Syslog",
        "configuration": {}
    },
    "processors": [
        {
            "processor": "parse.CEFAttribute",
            "configuration": {
                "columnName": "Message",
                "all": [
                    {
                        "path": "deviceAction",
                        "nameAs": "DeviceAction",
                        "typeAs": "string"
                    }
                ]
            }
        }
    ]
}

Alım zamanı dönüşümü:

{
    "name": "ingestion_map_to_csl",
    "headerProcessor": {
        "processor": "header.StandardStream",
        "configuration": {
            "streamId": "Microsoft-CommonSecurityLog"
        }
    },
    "processors": [
        {
            "processor": "transform.KQL",
            "configuration": {
                "expression": "source | extend DeviceAction = DeviceAction"
            }
        }
    ]
}