Strwythuro data anstrwythuredig gyda GROK
Os ydych chi'n defnyddio'r stac Elastic (ELK) a bod gennych ddiddordeb mewn mapio logiau Logstash wedi'u teilwra i Elasticsearch, yna mae'r swydd hon ar eich cyfer chi.
Mae stac ELK yn acronym ar gyfer tri phrosiect ffynhonnell agored: Elasticsearch, Logstash a Kibana. Gyda'i gilydd maent yn ffurfio llwyfan rheoli logiau.
- Elastig yn system chwilio a dadansoddi.
- Logstash yn biblinell prosesu data ochr y gweinydd sy'n amlyncu data o ffynonellau lluosog ar yr un pryd, yn ei drawsnewid, ac yna'n ei anfon i βstashβ fel Elasticsearch.
- Kibana yn galluogi defnyddwyr i ddelweddu data gan ddefnyddio siartiau a graffiau yn Elasticsearch.
Beats Daeth yn ddiweddarach ac mae'n gludwr data ysgafn. Trawsnewidiodd cyflwyniad Beats yr Elk Stack yn Stac Elastig, ond nid dyna'r pwynt.
Mae'r erthygl hon yn ymwneud Γ’ Grok, sy'n nodwedd yn Logstash a all drawsnewid eich logiau cyn iddynt gael eu hanfon i'r stash. At ein dibenion ni, dim ond am brosesu data o Logstash i Elasticsearch y byddaf yn siarad.
Hidlydd y tu mewn i Logstash yw Grok a ddefnyddir i ddosrannu data anstrwythuredig yn rhywbeth strwythuredig y gellir ei ymholi. Mae'n eistedd ar ben mynegiant rheolaidd (regex) ac yn defnyddio patrymau testun i gyd-fynd Γ’ llinynnau mewn ffeiliau log.
Fel y gwelwn yn yr adrannau canlynol, mae defnyddio Grok yn gwneud gwahaniaeth mawr o ran rheoli logiau yn effeithlon.
Heb Grok mae eich data log yn anstrwythuredig
Heb Grok, pan anfonir logiau o Logstash i Elasticsearch a'u rendro yn Kibana, dim ond yng ngwerth y neges y maent yn ymddangos.
Mae cwestiynu gwybodaeth ystyrlon yn y sefyllfa hon yn anodd oherwydd bod yr holl ddata log yn cael ei storio mewn un allwedd. Byddai'n well pe bai'r negeseuon log wedi'u trefnu'n well.
Data distrwythur o logiau
localhost GET /v2/applink/5c2f4bb3e9fda1234edc64d 400 46ms 5bc6e716b5d6cb35fc9687c0
Os edrychwch yn ofalus ar y data crai, fe welwch ei fod mewn gwirionedd yn cynnwys gwahanol rannau, pob un wedi'i wahanu gan ofod.
Ar gyfer datblygwyr mwy profiadol, mae'n debyg y gallwch chi ddyfalu beth mae pob un o'r rhannau yn ei olygu a beth yw'r neges log honno o'r alwad API. Amlinellir cyflwyniad pob eitem isod.
Golwg strwythuredig ar ein data
- localhost == amgylchedd
- GET == dull
- β /v2/applink/5c2f4bb3e9fda1234edc64d == url
- 400 == statws_ymateb
- 46ms == amser ymateb
- β 5bc6e716b5d6cb35fc9687c0 == user_id
Fel y gwelwn mewn data strwythuredig, mae yna drefn ar gyfer logiau distrwythur. Y cam nesaf yw prosesu meddalwedd data crai. Dyma lle mae Grok yn disgleirio.
Templedi Grok
Templedi Grok adeiledig
Daw Logstash gyda dros 100 o dempledi adeiledig ar gyfer strwythuro data anstrwythuredig. Dylech bendant fanteisio ar hyn pryd bynnag y bo modd ar gyfer syslogs cyffredinol fel apache, linux, haproxy, aws ac yn y blaen.
Fodd bynnag, beth sy'n digwydd pan fydd gennych logiau arfer fel yn yr enghraifft uchod? Rhaid i chi adeiladu eich templed Grok eich hun.
Templedi Grok Custom
Mae'n rhaid i chi geisio adeiladu eich templed Grok eich hun. Defnyddiais i
Sylwch fod cystrawen templed Grok fel a ganlyn: %{SYNTAX:SEMANTIC}
Y peth cyntaf wnes i geisio ei wneud oedd mynd i'r tab Darganfod yn y dadfygiwr Grok. Roeddwn i'n meddwl y byddai'n cΕ΅l pe gallai'r offeryn hwn gynhyrchu patrwm Grok yn awtomatig, ond nid oedd yn rhy ddefnyddiol gan mai dim ond dwy gΓͺm y daeth o hyd iddynt.
Gan ddefnyddio'r darganfyddiad hwn, dechreuais greu fy nhempled fy hun yn y dadfygiwr Grok gan ddefnyddio'r gystrawen a geir ar dudalen Elastic Github.
Ar Γ΄l chwarae o gwmpas gyda gwahanol gystrawenau, roeddwn o'r diwedd yn gallu strwythuro'r data log y ffordd roeddwn i eisiau.
Cyswllt Dadfygiwr Grok
Testun gwreiddiol:
localhost GET /v2/applink/5c2f4bb3e9fda1234edc64d 400 46ms 5bc6e716b5d6cb35fc9687c0
patrwm:
%{WORD:environment} %{WORD:method} %{URIPATH:url} %{NUMBER:response_status} %{WORD:response_time} %{USERNAME:user_id}
Beth ddigwyddodd yn y diwedd
{
"environment": [
[
"localhost"
]
],
"method": [
[
"GET"
]
],
"url": [
[
"/v2/applink/5c2f4bb3e9fda1234edc64d"
]
],
"response_status": [
[
"400"
]
],
"BASE10NUM": [
[
"400"
]
],
"response_time": [
[
"46ms"
]
],
"user_id": [
[
"5bc6e716b5d6cb35fc9687c0"
]
]
}
Gyda thempled Grok a data wedi'i fapio mewn llaw, y cam olaf yw ei ychwanegu at Logstash.
Yn diweddaru'r ffeil ffurfweddu Logstash.conf
Ar y gweinydd lle gosodoch chi'r pentwr ELK, ewch i'r ffurfweddiad Logstash:
sudo vi /etc/logstash/conf.d/logstash.conf
Gludwch y newidiadau.
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" ]
}
}
Ar Γ΄l arbed eich newidiadau, ailgychwynwch Logstash a gwiriwch ei statws i sicrhau ei fod yn dal i weithio.
sudo service logstash restart
sudo service logstash status
Yn olaf, er mwyn sicrhau bod y newidiadau wedi dod i rym, Gwnewch yn siΕ΅r eich bod chi'n diweddaru'ch mynegai Elasticsearch ar gyfer Logstash yn Kibana!
Gyda Grok, mae eich data log wedi'i strwythuro!
Fel y gallwn weld yn y ddelwedd uchod, mae Grok yn gallu paru data log yn awtomatig ag Elasticsearch. Mae hyn yn ei gwneud hi'n haws rheoli logiau a chwestiynu gwybodaeth yn gyflym. Yn lle cloddio trwy ffeiliau log i ddadfygio, gallwch chi hidlo yn Γ΄l yr hyn rydych chi'n edrych amdano, fel amgylchedd neu url.
Rhowch gynnig ar ymadroddion Grok! Os oes gennych ffordd arall o wneud hyn neu os oes gennych unrhyw broblemau gyda'r enghreifftiau uchod, ysgrifennwch sylw isod i roi gwybod i mi.
Diolch am ddarllen - a dilynwch fi yma ar Canolig i gael erthyglau peirianneg meddalwedd mwy diddorol!
Adnoddau
Telegram sianel gan
Ffynhonnell: hab.com