Խորհուրդներ և հնարքներ չկառուցված տվյալները տեղեկամատյաններից ELK Stack փոխարկելու համար՝ օգտագործելով GROK-ը LogStash-ում

Չկառուցված տվյալների կառուցվածքը GROK-ի հետ

Եթե ​​դուք օգտագործում եք Elastic (ELK) կույտը և հետաքրքրված եք հատուկ Logstash տեղեկամատյանների քարտեզագրմամբ Elasticsearch-ում, ապա այս գրառումը ձեզ համար է:

Խորհուրդներ և հնարքներ չկառուցված տվյալները տեղեկամատյաններից ELK Stack փոխարկելու համար՝ օգտագործելով GROK-ը LogStash-ում

ELK stack-ը երեք բաց կոդով նախագծերի հապավումն է՝ Elasticsearch, Logstash և Kibana: Նրանք միասին կազմում են լոգերի կառավարման հարթակ:

  • Elasticsearch- ը որոնողական և վերլուծական համակարգ է։
  • Լոգստաշը սերվերի կողմից տվյալների մշակման խողովակաշար է, որը միաժամանակ ներծծում է բազմաթիվ աղբյուրներից ստացված տվյալներ, փոխակերպում դրանք և այնուհետև ուղարկում «պահոց», ինչպիսին է Elasticsearch-ը:
  • Կիբանա թույլ է տալիս օգտվողներին պատկերացնել տվյալները Elasticsearch-ում գծապատկերների և գծապատկերների միջոցով:

Բախում ավելի ուշ եկավ և տվյալների թեթև առաքիչ է: Beats-ի ներդրումը վերափոխեց Elk Stack-ը Elastic Stack-ի, բայց դա չէ խնդիրը:

Այս հոդվածը Grok-ի մասին է, որը Logstash-ի մի հատկանիշ է, որը կարող է փոխակերպել ձեր տեղեկամատյանները նախքան դրանք պահոց ուղարկելը: Մեր նպատակների համար ես կխոսեմ միայն Logstash-ից Elasticsearch տվյալների մշակման մասին:

Խորհուրդներ և հնարքներ չկառուցված տվյալները տեղեկամատյաններից ELK Stack փոխարկելու համար՝ օգտագործելով GROK-ը LogStash-ում

Grok-ը Logstash-ի ներսում զտիչ է, որն օգտագործվում է չկառուցված տվյալները վերլուծելու համար կառուցվածքային և հարցման ենթակա որևէ բանի: Այն նստում է կանոնավոր արտահայտության (regex) վերևում և օգտագործում է տեքստային նախշեր՝ մատյան ֆայլերում տողերը համապատասխանեցնելու համար:

Ինչպես կտեսնենք հաջորդ բաժիններում, Grok-ի օգտագործումը մեծ տարբերություն է տալիս, երբ խոսքը վերաբերում է մատյանների արդյունավետ կառավարմանը:

Առանց Grok-ի ձեր տեղեկամատյանների տվյալները անկառուցված չեն

Խորհուրդներ և հնարքներ չկառուցված տվյալները տեղեկամատյաններից ELK Stack փոխարկելու համար՝ օգտագործելով GROK-ը LogStash-ում

Առանց 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 Debugger и Grok Patterns.

Նշենք, որ Grok կաղապարի շարահյուսությունը հետևյալն է. %{SYNTAX:SEMANTIC}

Առաջին բանը, որ ես փորձեցի անել, ներդիրն էր Բացահայտեք Grok debugger-ում: Կարծում էի, որ լավ կլիներ, եթե այս գործիքը կարողանա ավտոմատ կերպով ստեղծել Grok օրինաչափություն, բայց դա այնքան էլ օգտակար չէր, քանի որ այն գտավ միայն երկու համընկնում:

Խորհուրդներ և հնարքներ չկառուցված տվյալները տեղեկամատյաններից ELK Stack փոխարկելու համար՝ օգտագործելով GROK-ը LogStash-ում

Օգտագործելով այս հայտնագործությունը, ես սկսեցի ստեղծել իմ սեփական ձևանմուշը Grok debugger-ում՝ օգտագործելով Elastic Github էջում հայտնաբերված շարահյուսությունը:

Խորհուրդներ և հնարքներ չկառուցված տվյալները տեղեկամատյաններից ELK Stack փոխարկելու համար՝ օգտագործելով GROK-ը LogStash-ում

Տարբեր շարահյուսությունների հետ խաղալուց հետո ես վերջապես կարողացա տեղեկամատյանների տվյալները կառուցվածքավորել այնպես, ինչպես ուզում էի:

Խորհուրդներ և հնարքներ չկառուցված տվյալները տեղեկամատյաններից ELK Stack փոխարկելու համար՝ օգտագործելով GROK-ը LogStash-ում

Grok Debugger Link https://grokdebug.herokuapp.com/

Բնօրինակ տեքստ.

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-ում:

Խորհուրդներ և հնարքներ չկառուցված տվյալները տեղեկամատյաններից ELK Stack փոխարկելու համար՝ օգտագործելով GROK-ը LogStash-ում

Grok-ի հետ ձեր գրանցամատյանի տվյալները կառուցված են:

Խորհուրդներ և հնարքներ չկառուցված տվյալները տեղեկամատյաններից ELK Stack փոխարկելու համար՝ օգտագործելով GROK-ը LogStash-ում

Ինչպես տեսնում ենք վերևի նկարում, Grok-ն ի վիճակի է ավտոմատ կերպով համապատասխանեցնել տեղեկամատյանների տվյալները Elasticsearch-ի հետ: Սա հեշտացնում է տեղեկամատյանների կառավարումը և տեղեկատվության արագ հարցումը: Մատյանների ֆայլերը փորփրելու փոխարեն՝ վրիպազերծելու համար, դուք կարող եք պարզապես զտել ըստ ձեր փնտրածի, օրինակ՝ միջավայրի կամ url-ի:

Փորձեք Grok արտահայտությունները: Եթե ​​դուք ունեք դա անելու այլ եղանակ կամ խնդիրներ ունեք վերը նշված օրինակների հետ, պարզապես գրեք մեկնաբանություն ստորև՝ ինձ տեղյակ պահելու համար:

Շնորհակալություն կարդալու համար, և խնդրում եմ հետևեք ինձ այստեղ Medium-ում ավելի հետաքրքիր ծրագրային ինժեներական հոդվածների համար:

Ресурсы

https://www.elastic.co/blog/do-you-grok-grok
https://github.com/elastic/logstash/blob/v1.4.2/patterns/grok-patterns
https://grokdebug.herokuapp.com/

PS Աղբյուրի հղումը

Telegram-ի ալիքը Elasticsearch- ը

Source: www.habr.com

Добавить комментарий