ื˜ื™ืคื™ื ื•ื˜ืจื™ืงื™ื ืœื”ืžืจืช ื ืชื•ื ื™ื ืœื ืžื•ื‘ื ื™ื ืžื™ื•ืžื ื™ื ืœ-ELK Stack ื‘ืืžืฆืขื•ืช GROK ื‘-LogStash

ื‘ื ื™ื™ืช ื ืชื•ื ื™ื ืœื ืžื•ื‘ื ื™ื ืขื GROK

ืื ืืชื” ืžืฉืชืžืฉ ื‘ืขืจื™ืžืช Elastic (ELK) ื•ืžืขื•ื ื™ื™ืŸ ืœืžืคื•ืช ื™ื•ืžื ื™ Logstash ืžื•ืชืืžื™ื ืื™ืฉื™ืช ืœ- Elasticsearch, ื”ืคื•ืกื˜ ื”ื–ื” ื”ื•ื ื‘ืฉื‘ื™ืœืš.

ื˜ื™ืคื™ื ื•ื˜ืจื™ืงื™ื ืœื”ืžืจืช ื ืชื•ื ื™ื ืœื ืžื•ื‘ื ื™ื ืžื™ื•ืžื ื™ื ืœ-ELK Stack ื‘ืืžืฆืขื•ืช GROK ื‘-LogStash

ืžื—ืกื ื™ืช ELK ื”ื™ื ืจืืฉื™ ืชื™ื‘ื•ืช ืฉืœ ืฉืœื•ืฉื” ืคืจื•ื™ืงื˜ื™ื ื‘ืงื•ื“ ืคืชื•ื—: Elasticsearch, Logstash ื•-Kibana. ื™ื—ื“ ื”ื ื™ื•ืฆืจื™ื ืคืœื˜ืคื•ืจืžื” ืœื ื™ื”ื•ืœ ื™ื•ืžื ื™ื.

  • Elasticsearch ื”ื™ื ืžืขืจื›ืช ื—ื™ืคื•ืฉ ื•ื ื™ืชื•ื—.
  • ืœื•ื’ืกื˜ืืฉ ื”ื•ื ืฆื™ื ื•ืจ ืขื™ื‘ื•ื“ ื ืชื•ื ื™ื ื‘ืฆื“ ื”ืฉืจืช ืืฉืจ ืงื•ืœื˜ ื ืชื•ื ื™ื ืžืžืกืคืจ ืžืงื•ืจื•ืช ื‘ื•-ื–ืžื ื™ืช, ื”ื•ืคืš ืื•ืชื, ื•ืœืื—ืจ ืžื›ืŸ ืฉื•ืœื— ืื•ืชื ืœ"ืกื˜ืืฉ" ื›ื’ื•ืŸ Elasticsearch.
  • ืงื™ื‘ืื ื” ืžืืคืฉืจ ืœืžืฉืชืžืฉื™ื ืœื“ืžื™ื™ืŸ ื ืชื•ื ื™ื ื‘ืืžืฆืขื•ืช ืชืจืฉื™ืžื™ื ื•ื’ืจืคื™ื ื‘- Elasticsearch.

ืคืขื™ืžื•ืช ื”ื’ื™ืข ืžืื•ื—ืจ ื™ื•ืชืจ ื•ื”ื•ื ืฉื•ืœื— ื ืชื•ื ื™ื ืงืœ ืžืฉืงืœ. ื”ื”ืงื“ืžื” ืฉืœ Beats ื”ืคื›ื” ืืช Elk Stack ืœ- Elastic Stack, ืื‘ืœ ื–ื” ืœื ื”ืขื ื™ื™ืŸ.

ืžืืžืจ ื–ื” ืขื•ืกืง ื‘-Grok, ืฉื”ื•ื ืชื›ื•ื ื” ื‘-Logstash ืฉื™ื›ื•ืœื” ืœืฉื ื•ืช ืืช ื”ื™ื•ืžื ื™ื ืฉืœืš ืœืคื ื™ ืฉื”ื ื ืฉืœื—ื™ื ืœ-stash. ืœืžื˜ืจื•ืชื™ื ื•, ืื“ื‘ืจ ืจืง ืขืœ ืขื™ื‘ื•ื“ ื ืชื•ื ื™ื ืž-Logstash ืœืชื•ืš Elasticsearch.

ื˜ื™ืคื™ื ื•ื˜ืจื™ืงื™ื ืœื”ืžืจืช ื ืชื•ื ื™ื ืœื ืžื•ื‘ื ื™ื ืžื™ื•ืžื ื™ื ืœ-ELK Stack ื‘ืืžืฆืขื•ืช GROK ื‘-LogStash

Grok ื”ื•ื ืžืกื ืŸ ื‘ืชื•ืš Logstash ื”ืžืฉืžืฉ ืœื ื™ืชื•ื— ื ืชื•ื ื™ื ืœื ืžื•ื‘ื ื™ื ืœืžืฉื”ื• ืžื•ื‘ื ื” ื•ื ื™ืชืŸ ืœืฉืื™ืœืชื•ืช. ื”ื•ื ื™ื•ืฉื‘ ืขืœ ื‘ื™ื˜ื•ื™ ืจื’ื•ืœืจื™ (ืจื’ืงืก) ื•ืžืฉืชืžืฉ ื‘ื“ืคื•ืกื™ ื˜ืงืกื˜ ื›ื“ื™ ืœื”ืชืื™ื ืžื—ืจื•ื–ื•ืช ื‘ืงื•ื‘ืฆื™ ื™ื•ืžืŸ.

ื›ืคื™ ืฉื ืจืื” ื‘ืกืขื™ืคื™ื ื”ื‘ืื™ื, ื”ืฉื™ืžื•ืฉ ื‘ื’ืจื•ืง ืขื•ืฉื” ื”ื‘ื“ืœ ื’ื“ื•ืœ ื‘ื›ืœ ื”ื ื•ื’ืข ืœื ื™ื”ื•ืœ ื™ื•ืžืŸ ื™ืขื™ืœ.

ืœืœื 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

ื›ืคื™ ืฉืื ื• ืจื•ืื™ื ื‘ื ืชื•ื ื™ื ืžื•ื‘ื ื™ื, ื™ืฉ ืกื“ืจ ืœืœื•ื’ื™ื ืœื ืžื•ื‘ื ื™ื. ื”ืฉืœื‘ ื”ื‘ื ื”ื•ื ืขื™ื‘ื•ื“ ืชื•ื›ื ื” ืฉืœ ื ืชื•ื ื™ื ื’ื•ืœืžื™ื™ื. ื–ื” ื”ืžืงื•ื ืฉื‘ื• ื’ืจื•ืง ื–ื•ืจื—.

ืชื‘ื ื™ื•ืช ื’ืจื•ืง

ืชื‘ื ื™ื•ืช ื’ืจื•ืง ืžื•ื‘ื ื•ืช

Logstash ืžื’ื™ืข ืขื ืœืžืขืœื” ืž-100 ืชื‘ื ื™ื•ืช ืžื•ื‘ื ื•ืช ืœื‘ื ื™ื™ืช ื ืชื•ื ื™ื ืœื ืžื•ื‘ื ื™ื. ืืชื” ื‘ื”ื—ืœื˜ ืฆืจื™ืš ืœื ืฆืœ ืืช ื–ื” ื‘ื›ืœ ืคืขื ืฉืืคืฉืจ ืขื‘ื•ืจ ืกื™ืกืœื•ื’ื™ื ื›ืœืœื™ื™ื ื›ืžื• apache, linux, haproxy, aws ื•ื›ืŸ ื”ืœืื”.

ืขื ื–ืืช, ืžื” ืงื•ืจื” ื›ืฉื™ืฉ ืœืš ื™ื•ืžื ื™ื ืžื•ืชืืžื™ื ืื™ืฉื™ืช ื›ืžื• ื‘ื“ื•ื’ืžื” ืœืžืขืœื”? ืขืœื™ืš ืœื‘ื ื•ืช ืชื‘ื ื™ืช ื’ืจื•ืง ืžืฉืœืš.

ืชื‘ื ื™ื•ืช ื’ืจื•ืง ืžื•ืชืืžื•ืช ืื™ืฉื™ืช

ืืชื” ืฆืจื™ืš ืœื ืกื•ืช ืœื‘ื ื•ืช ืชื‘ื ื™ืช ื’ืจื•ืง ืžืฉืœืš. ื”ืฉืชืžืฉืชื™ ื’ืจื•ืง ื‘ืื’ื™ื ะธ ื“ืคื•ืกื™ ื’ืจื•ืง.

ืฉื™ืžื• ืœื‘ ืฉืชื—ื‘ื™ืจ ืชื‘ื ื™ืช Grok ื”ื•ื ื›ื“ืœืงืžืŸ: %{SYNTAX:SEMANTIC}

ื”ื“ื‘ืจ ื”ืจืืฉื•ืŸ ืฉื ื™ืกื™ืชื™ ืœืขืฉื•ืช ื”ื™ื” ืœืœื›ืช ืœื›ืจื˜ื™ืกื™ื™ื” ื’ื™ืœื•ื™ ื‘ืื’ืฃ ื’ืจื•ืง. ื—ืฉื‘ืชื™ ืฉื–ื” ื™ื”ื™ื” ืžื’ื ื™ื‘ ืื ื”ื›ืœื™ ื”ื–ื” ื™ื•ื›ืœ ืœื™ืฆื•ืจ ื‘ืื•ืคืŸ ืื•ื˜ื•ืžื˜ื™ ืชื‘ื ื™ืช ื’ืจื•ืง, ืื‘ืœ ื–ื” ืœื ื”ื™ื” ืฉื™ืžื•ืฉื™ ืžื“ื™ ืžื›ื™ื•ื•ืŸ ืฉื”ื•ื ืžืฆื ืจืง ืฉืชื™ ื”ืชืืžื•ืช.

ื˜ื™ืคื™ื ื•ื˜ืจื™ืงื™ื ืœื”ืžืจืช ื ืชื•ื ื™ื ืœื ืžื•ื‘ื ื™ื ืžื™ื•ืžื ื™ื ืœ-ELK Stack ื‘ืืžืฆืขื•ืช GROK ื‘-LogStash

ื‘ืืžืฆืขื•ืช ื”ื’ื™ืœื•ื™ ื”ื–ื”, ื”ืชื—ืœืชื™ ืœื™ืฆื•ืจ ืชื‘ื ื™ืช ืžืฉืœื™ ื‘ืžืคืจืง ื”ื‘ืื’ื™ื ืฉืœ Grok ื‘ืืžืฆืขื•ืช ื”ืชื—ื‘ื™ืจ ืฉื ืžืฆื ื‘ื“ืฃ Elastic Github.

ื˜ื™ืคื™ื ื•ื˜ืจื™ืงื™ื ืœื”ืžืจืช ื ืชื•ื ื™ื ืœื ืžื•ื‘ื ื™ื ืžื™ื•ืžื ื™ื ืœ-ELK Stack ื‘ืืžืฆืขื•ืช GROK ื‘-LogStash

ืœืื—ืจ ืฉืฉื™ื—ืงืชื™ ืขื ืชื—ื‘ื™ืจื™ื ืฉื•ื ื™ื, ืกื•ืฃ ืกื•ืฃ ื”ืฆืœื—ืชื™ ืœื‘ื ื•ืช ืืช ื ืชื•ื ื™ ื”ื™ื•ืžืŸ ื›ืžื• ืฉืจืฆื™ืชื™.

ื˜ื™ืคื™ื ื•ื˜ืจื™ืงื™ื ืœื”ืžืจืช ื ืชื•ื ื™ื ืœื ืžื•ื‘ื ื™ื ืžื™ื•ืžื ื™ื ืœ-ELK Stack ื‘ืืžืฆืขื•ืช GROK ื‘-LogStash

ืงื™ืฉื•ืจ ืœื ื™ืคื•ื™ ื‘ืื’ื™ื ืฉืœ ื’ืจื•ืง 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. ื–ื” ืžืงืœ ืขืœ ื ื™ื”ื•ืœ ื™ื•ืžื ื™ื ื•ืฉืื™ืœืชื•ืช ืžื™ื“ืข ื‘ืžื”ื™ืจื•ืช. ื‘ืžืงื•ื ืœื—ืคื•ืจ ื‘ืงื•ื‘ืฆื™ ื™ื•ืžืŸ ื›ื“ื™ ืœื‘ืฆืข ื ื™ืคื•ื™ ื‘ืื’ื™ื, ืืชื” ื™ื›ื•ืœ ืคืฉื•ื˜ ืœืกื ืŸ ืœืคื™ ืžื” ืฉืืชื” ืžื—ืคืฉ, ื›ื’ื•ืŸ ืกื‘ื™ื‘ื” ืื• ื›ืชื•ื‘ืช ืืชืจ.

ื ืกื” ืืช ื‘ื™ื˜ื•ื™ื™ ื’ืจื•ืง! ืื ื™ืฉ ืœืš ื“ืจืš ืื—ืจืช ืœืขืฉื•ืช ื–ืืช ืื• ืฉื™ืฉ ืœืš ื‘ืขื™ื•ืช ื›ืœืฉื”ืŸ ืขื ื”ื“ื•ื’ืžืื•ืช ืœืžืขืœื”, ืคืฉื•ื˜ ื›ืชื•ื‘ ืชื’ื•ื‘ื” ืœืžื˜ื” ื›ื“ื™ ืœื™ื™ื“ืข ืื•ืชื™.

ืชื•ื“ื” ืฉืงืจืืชื - ื•ื‘ื‘ืงืฉื” ืขืงื‘ื• ืื—ืจื™ ื›ืืŸ ื‘-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/

ื .ื‘. ืงื™ืฉื•ืจ ืœืžืงื•ืจ

ืขืจื•ืฅ ื˜ืœื’ืจื ืžืืช Elasticsearch

ืžืงื•ืจ: www.habr.com

ื”ื•ืกืคืช ืชื’ื•ื‘ื”