Strukturoimaton data GROK:lla
Jos käytät Elastic (ELK) -pinoa ja olet kiinnostunut yhdistämään mukautetut Logstash-lokit Elasticsearchiin, tämä viesti on sinua varten.
ELK-pino on lyhenne kolmesta avoimen lähdekoodin projektista: Elasticsearch, Logstash ja Kibana. Yhdessä ne muodostavat lokinhallintaalustan.
- Elasticsearch on haku- ja analyyttinen järjestelmä.
- Logstash on palvelinpuolen tietojenkäsittelyputki, joka syöttää tietoja useista lähteistä samanaikaisesti, muuntaa sen ja lähettää sen sitten "säilytykseen", kuten Elasticsearchiin.
- Kibana avulla käyttäjät voivat visualisoida tietoja käyttämällä kaavioita ja kaavioita Elasticsearchissa.
Beats tuli myöhemmin ja on kevyt datalähettäjä. Beatsin esittely muutti Elk Stackin Elastic Stackiksi, mutta siitä ei ole kyse.
Tämä artikkeli käsittelee Grokia, joka on Logstashin ominaisuus, joka voi muuttaa lokit ennen kuin ne lähetetään säilytystilaan. Tarkoituksemme varten puhun vain Logstash-tietojen käsittelystä Elasticsearchiin.
Grok on Logstashin sisällä oleva suodatin, jota käytetään jäsentämään jäsentämättömät tiedot jäsennellyksi ja kyselykelpoiseksi. Se sijaitsee säännöllisen lausekkeen (regex) päällä ja käyttää tekstimalleja lokitiedostojen merkkijonojen yhdistämiseen.
Kuten seuraavissa osissa näemme, Grokin käyttäminen on suuri ero tehokkaassa lokinhallinnassa.
Ilman Grokia lokitietosi ovat jäsentämättömiä
Ilman Grokia, kun lokit lähetetään Logstashista Elasticsearchiin ja renderöidään Kibanassa, ne näkyvät vain viestin arvossa.
Tässä tilanteessa merkityksellisten tietojen kysely on vaikeaa, koska kaikki lokitiedot on tallennettu yhteen avaimeen. Olisi parempi, jos lokiviestit olisi paremmin järjestetty.
Strukturoimatonta tietoa lokeista
localhost GET /v2/applink/5c2f4bb3e9fda1234edc64d 400 46ms 5bc6e716b5d6cb35fc9687c0
Jos tarkastelet raakadataa tarkasti, huomaat, että se koostuu itse asiassa eri osista, joista jokainen on erotettu välilyönnillä.
Kokeneemmat kehittäjät voivat luultavasti arvata, mitä kukin osa tarkoittaa ja mikä lokiviesti on API-kutsusta. Kunkin kohteen esittely on kuvattu alla.
Strukturoitu näkymä tiedoistamme
- localhost == ympäristö
- GET == -menetelmä
- /v2/applink/5c2f4bb3e9fda1234edc64d == url
- 400 == vastauksen_tila
- 46 ms == vasteaika
- 5bc6e716b5d6cb35fc9687c0 == user_id
Kuten strukturoidussa datassa näemme, jäsentelemättömille lokeille on tilaus. Seuraava vaihe on raakatietojen ohjelmistokäsittely. Täällä Grok loistaa.
Grok mallit
Sisäänrakennetut Grok-mallit
Logstashissa on yli 100 sisäänrakennettua mallia jäsentämättömän tiedon strukturoimiseksi. Sinun tulee ehdottomasti hyödyntää tätä aina kun mahdollista yleisissä syslogeissa, kuten apache, linux, haproxy, aws ja niin edelleen.
Mitä tapahtuu, kun sinulla on mukautettuja lokeja, kuten yllä olevassa esimerkissä? Sinun on rakennettava oma Grok-malli.
Mukautetut Grok-mallit
Sinun täytyy yrittää rakentaa oma Grok-mallisi. käytin
Huomaa, että Grok-mallin syntaksi on seuraava: %{SYNTAX:SEMANTIC}
Ensimmäinen asia, jonka yritin tehdä, oli mennä välilehdelle Tutustu Grok-debuggerissa. Ajattelin, että olisi hienoa, jos tämä työkalu voisi luoda automaattisesti Grok-kuvion, mutta se ei ollut kovin hyödyllinen, koska se löysi vain kaksi vastaavuutta.
Tämän löydön avulla aloin luoda oman mallini Grok-debuggerissa käyttämällä Elastic Github -sivulta löytyvää syntaksia.
Erilaisten syntaksien kanssa leikkimisen jälkeen pystyin lopulta jäsentämään lokitiedot haluamallani tavalla.
Grok Debugger -linkki
Alkuperäinen teksti:
localhost GET /v2/applink/5c2f4bb3e9fda1234edc64d 400 46ms 5bc6e716b5d6cb35fc9687c0
Kuvio:
%{WORD:environment} %{WORD:method} %{URIPATH:url} %{NUMBER:response_status} %{WORD:response_time} %{USERNAME:user_id}
Mitä lopussa tapahtui
{
"environment": [
[
"localhost"
]
],
"method": [
[
"GET"
]
],
"url": [
[
"/v2/applink/5c2f4bb3e9fda1234edc64d"
]
],
"response_status": [
[
"400"
]
],
"BASE10NUM": [
[
"400"
]
],
"response_time": [
[
"46ms"
]
],
"user_id": [
[
"5bc6e716b5d6cb35fc9687c0"
]
]
}
Kun Grok-malli ja kartoitetut tiedot ovat käsissä, viimeinen vaihe on lisätä se Logstashiin.
Päivitetään Logstash.conf-määritystiedostoa
Siirry Logstash-kokoonpanoon palvelimella, johon asensit ELK-pinon:
sudo vi /etc/logstash/conf.d/logstash.conf
Liitä muutokset.
input {
file {
path => "/your_logs/*.log"
}
}
filter{
grok {
match => { "message" => "%{WORD:environment} %{WORD:method} %{URIPATH:url} %{NUMBER:response_status} %{WORD:response_time} %{USERNAME:user_id}"}
}
}
output {
elasticsearch {
hosts => [ "localhost:9200" ]
}
}
Kun olet tallentanut muutokset, käynnistä Logstash uudelleen ja tarkista sen tila varmistaaksesi, että se toimii edelleen.
sudo service logstash restart
sudo service logstash status
Lopuksi varmistaaksesi, että muutokset ovat tulleet voimaan, Muista päivittää Elasticsearch-indeksisi Logstashille Kibanassa!
Grokin avulla lokitietosi on jäsennelty!
Kuten yllä olevasta kuvasta näemme, Grok pystyy sovittamaan lokitiedot automaattisesti Elasticsearchin kanssa. Tämä helpottaa lokien hallintaa ja tietojen nopeaa kyselyä. Sen sijaan, että kaivelisit lokitiedostoja virheenkorjausta varten, voit yksinkertaisesti suodattaa etsimäsi perusteella, kuten ympäristön tai URL-osoitteen.
Kokeile Grokin ilmaisuja! Jos sinulla on jokin muu tapa tehdä tämä tai sinulla on ongelmia yllä olevien esimerkkien kanssa, kirjoita vain kommentti alle ja kerro minulle.
Kiitos, että luit – ja seuraa minua täällä Mediumissa saadaksesi lisää mielenkiintoisia ohjelmistosuunnitteluartikkeleita!
voimavarat
PS
Telegram-kanava
Lähde: will.com