Չկառուցված տվյալների կառուցվածքը GROK-ի հետ
Եթե դուք օգտագործում եք Elastic (ELK) կույտը և հետաքրքրված եք հատուկ Logstash տեղեկամատյանների քարտեզագրմամբ Elasticsearch-ում, ապա այս գրառումը ձեզ համար է:
ELK stack-ը երեք բաց կոդով նախագծերի հապավումն է՝ Elasticsearch, Logstash և Kibana: Նրանք միասին կազմում են լոգերի կառավարման հարթակ:
- Elasticsearch- ը որոնողական և վերլուծական համակարգ է։
- Լոգստաշը սերվերի կողմից տվյալների մշակման խողովակաշար է, որը միաժամանակ ներծծում է բազմաթիվ աղբյուրներից ստացված տվյալներ, փոխակերպում դրանք և այնուհետև ուղարկում «պահոց», ինչպիսին է Elasticsearch-ը:
- Կիբանա թույլ է տալիս օգտվողներին պատկերացնել տվյալները Elasticsearch-ում գծապատկերների և գծապատկերների միջոցով:
Բախում ավելի ուշ եկավ և տվյալների թեթև առաքիչ է: Beats-ի ներդրումը վերափոխեց Elk Stack-ը Elastic Stack-ի, բայց դա չէ խնդիրը:
Այս հոդվածը Grok-ի մասին է, որը Logstash-ի մի հատկանիշ է, որը կարող է փոխակերպել ձեր տեղեկամատյանները նախքան դրանք պահոց ուղարկելը: Մեր նպատակների համար ես կխոսեմ միայն Logstash-ից Elasticsearch տվյալների մշակման մասին:
Grok-ը Logstash-ի ներսում զտիչ է, որն օգտագործվում է չկառուցված տվյալները վերլուծելու համար կառուցվածքային և հարցման ենթակա որևէ բանի: Այն նստում է կանոնավոր արտահայտության (regex) վերևում և օգտագործում է տեքստային նախշեր՝ մատյան ֆայլերում տողերը համապատասխանեցնելու համար:
Ինչպես կտեսնենք հաջորդ բաժիններում, Grok-ի օգտագործումը մեծ տարբերություն է տալիս, երբ խոսքը վերաբերում է մատյանների արդյունավետ կառավարմանը:
Առանց Grok-ի ձեր տեղեկամատյանների տվյալները անկառուցված չեն
Առանց Grok-ի, երբ տեղեկամատյանները Logstash-ից ուղարկվում են Elasticsearch և ցուցադրվում Kibana-ում, դրանք հայտնվում են միայն հաղորդագրության արժեքում:
Այս իրավիճակում իմաստալից տեղեկատվության հարցումը դժվար է, քանի որ գրանցամատյանի բոլոր տվյալները պահվում են մեկ բանալիով: Ավելի լավ կլիներ, որ տեղեկամատյանների հաղորդագրություններն ավելի լավ կազմակերպվեին:
Չկառուցված տվյալներ տեղեկամատյաններից
localhost GET /v2/applink/5c2f4bb3e9fda1234edc64d 400 46ms 5bc6e716b5d6cb35fc9687c0
Եթե ուշադիր նայեք չմշակված տվյալներին, կտեսնեք, որ այն իրականում բաղկացած է տարբեր մասերից, որոնցից յուրաքանչյուրը բաժանված է բացատով:
Ավելի փորձառու ծրագրավորողների համար դուք հավանաբար կարող եք կռահել, թե ինչ է նշանակում մասերից յուրաքանչյուրը և որն է այդ տեղեկամատյանի հաղորդագրությունը API-ի զանգից: Յուրաքանչյուր կետի ներկայացումը ներկայացված է ստորև:
Մեր տվյալների կառուցվածքային տեսք
- localhost == միջավայր
- GET == մեթոդ
- /v2/applink/5c2f4bb3e9fda1234edc64d == url
- 400 == պատասխան_կարգավիճակ
- 46ms == արձագանքման_ժամանակ
- 5bc6e716b5d6cb35fc9687c0 == user_id
Ինչպես տեսնում ենք կառուցվածքային տվյալների մեջ, կա չկառուցված տեղեկամատյանների պատվեր: Հաջորդ քայլը հում տվյալների ծրագրային մշակումն է: Հենց այստեղ է փայլում Գրոկը։
Grok կաղապարներ
Ներկառուցված Grok կաղապարներ
Logstash-ը գալիս է ավելի քան 100 ներկառուցված ձևանմուշներով՝ չկառուցված տվյալների կառուցվածքի համար: Դուք անպայման պետք է օգտվեք դրանից, երբ դա հնարավոր է ընդհանուր syslog-ների համար, ինչպիսիք են apache-ն, linux-ը, haproxy-ը, aws-ը և այլն:
Այնուամենայնիվ, ի՞նչ է տեղի ունենում, երբ դուք ունեք հատուկ տեղեկամատյաններ, ինչպես վերը նշված օրինակում: Դուք պետք է ստեղծեք ձեր սեփական Grok ձևանմուշը:
Պատվերով Grok կաղապարներ
Դուք պետք է փորձեք կառուցել ձեր սեփական Grok կաղապարը: ես օգտագործել եմ
Նշենք, որ Grok կաղապարի շարահյուսությունը հետևյալն է. %{SYNTAX:SEMANTIC}
Առաջին բանը, որ ես փորձեցի անել, ներդիրն էր Բացահայտեք Grok debugger-ում: Կարծում էի, որ լավ կլիներ, եթե այս գործիքը կարողանա ավտոմատ կերպով ստեղծել Grok օրինաչափություն, բայց դա այնքան էլ օգտակար չէր, քանի որ այն գտավ միայն երկու համընկնում:
Օգտագործելով այս հայտնագործությունը, ես սկսեցի ստեղծել իմ սեփական ձևանմուշը Grok debugger-ում՝ օգտագործելով Elastic Github էջում հայտնաբերված շարահյուսությունը:
Տարբեր շարահյուսությունների հետ խաղալուց հետո ես վերջապես կարողացա տեղեկամատյանների տվյալները կառուցվածքավորել այնպես, ինչպես ուզում էի:
Grok Debugger Link
Բնօրինակ տեքստ.
localhost GET /v2/applink/5c2f4bb3e9fda1234edc64d 400 46ms 5bc6e716b5d6cb35fc9687c0
Կաղապար:
%{WORD:environment} %{WORD:method} %{URIPATH:url} %{NUMBER:response_status} %{WORD:response_time} %{USERNAME:user_id}
Ինչ եղավ վերջում
{
"environment": [
[
"localhost"
]
],
"method": [
[
"GET"
]
],
"url": [
[
"/v2/applink/5c2f4bb3e9fda1234edc64d"
]
],
"response_status": [
[
"400"
]
],
"BASE10NUM": [
[
"400"
]
],
"response_time": [
[
"46ms"
]
],
"user_id": [
[
"5bc6e716b5d6cb35fc9687c0"
]
]
}
Grok ձևանմուշով և քարտեզագրված տվյալների ձեռքին, վերջին քայլն այն Logstash-ում ավելացնելն է:
Logstash.conf կազմաձևման ֆայլի թարմացում
Սերվերի վրա, որտեղ դուք տեղադրել եք ELK ստեկը, անցեք Logstash կազմաձևում.
sudo vi /etc/logstash/conf.d/logstash.conf
Տեղադրեք փոփոխությունները:
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" ]
}
}
Փոփոխությունները պահելուց հետո վերագործարկեք Logstash-ը և ստուգեք դրա կարգավիճակը՝ համոզվելու համար, որ այն դեռ աշխատում է:
sudo service logstash restart
sudo service logstash status
Վերջապես, համոզվելու համար, որ փոփոխություններն ուժի մեջ են, Համոզվեք, որ թարմացրեք ձեր Elasticsearch ինդեքսը Logstash-ի համար Kibana-ում:
Grok-ի հետ ձեր գրանցամատյանի տվյալները կառուցված են:
Ինչպես տեսնում ենք վերևի նկարում, Grok-ն ի վիճակի է ավտոմատ կերպով համապատասխանեցնել տեղեկամատյանների տվյալները Elasticsearch-ի հետ: Սա հեշտացնում է տեղեկամատյանների կառավարումը և տեղեկատվության արագ հարցումը: Մատյանների ֆայլերը փորփրելու փոխարեն՝ վրիպազերծելու համար, դուք կարող եք պարզապես զտել ըստ ձեր փնտրածի, օրինակ՝ միջավայրի կամ url-ի:
Փորձեք Grok արտահայտությունները: Եթե դուք ունեք դա անելու այլ եղանակ կամ խնդիրներ ունեք վերը նշված օրինակների հետ, պարզապես գրեք մեկնաբանություն ստորև՝ ինձ տեղյակ պահելու համար:
Շնորհակալություն կարդալու համար, և խնդրում եմ հետևեք ինձ այստեղ Medium-ում ավելի հետաքրքիր ծրագրային ինժեներական հոդվածների համար:
Ресурсы
Telegram-ի ալիքը
Source: www.habr.com