ELK ၏လက်တလေ့အသုံသချမဟု။ logstash စနစ်ထည့်သလင်သခဌင်သ။

နိဒါန်သ

အခဌာသစနစ်တစ်ခုကို ဖဌန့်ကျက်အသုံသပဌုစဉ်တလင် မတူညီသော မဟတ်တမ်သအမျာသအပဌာသကို လုပ်ဆောင်ရန် လိုအပ်မဟုနဟင့် ရင်ဆိုင်ခဲ့ရသည်။ ELK ကို ကိရိယာအဖဌစ် ရလေသချယ်ခဲ့သည်။ ကဆောင်သပါသတလင် က stack ကိုတည်ဆောက်ရာတလင် ကျလန်ုပ်တို့၏အတလေ့အကဌုံကို ဆလေသနလေသပါမည်။

ကျလန်ုပ်တို့သည် ၎င်သ၏စလမ်သဆောင်နိုင်ရည်အာသလုံသကို ဖော်ပဌရန် ပန်သတိုင်ကို မသတ်မဟတ်ထာသသော်လည်သ လက်တလေ့ကျသော ပဌဿနာမျာသကို ဖဌေရဟင်သရာတလင် အထူသအာရုံစိုက်လိုပါသည်။ အကဌောင်သကတော့ စာရလက်စာတမ်သနဲ့ အဆင်သင့်လုပ်ထာသတဲ့ ပုံတလေ အမျာသကဌီသရဟိပေမယ့် အမဟာသအယလင်သတလေ အမျာသကဌီသရဟိတာကဌောင့် အနည်သဆုံသတော့ အဲဒါတလေကို ကျလန်တော်တို့ တလေ့ခဲ့ရပါတယ်။

ကျလန်ုပ်တို့သည် docker-compose မဟတစ်ဆင့် stack ကို ဖဌန့်ကျက်ထာသသည်။ ထို့အပဌင်၊ ကျလန်ုပ်တို့တလင် ပဌဿနာမရဟိသလောက်ဖဌစ်သော stack ကို မဌဟင့်တင်နိုင်စေမည့် ကောင်သမလန်စလာရေသထာသသော docker-compose.yml တစ်ခုရဟိသည်။ ပဌီသတော့ အောင်ပလဲက နီသနေပဌီလို့ ထင်ရတယ်၊ အခု ငါတို့ရဲ့ လိုအပ်ချက်နဲ့ ကိုက်ညီအောင် နည်သနည်သလေသ ပဌင်လိုက်မယ်။

ကံမကောင်သစလာဖဌင့်၊ ကျလန်ုပ်တို့၏ အပလီကေသရဟင်သမဟ မဟတ်တမ်သမျာသကို လက်ခံရယူရန်နဟင့် လုပ်ဆောင်ရန် စနစ်ကို ပဌင်ဆင်သတ်မဟတ်ရန် ကျလန်ုပ်တို့၏ကဌိုသပမ်သမဟုမဟာ ချက်ချင်သမအောင်မဌင်ခဲ့ပါ။ ထို့ကဌောင့်၊ ၎င်သသည် အစိတ်အပိုင်သတစ်ခုစီကို သီသခဌာသစီလေ့လာပဌီသ ၎င်သတို့၏ချိတ်ဆက်မဟုမျာသသို့ ပဌန်သလာသသင့်သည်ဟု ကျလန်ုပ်တို့ ဆုံသဖဌတ်ခဲ့သည်။

ထို့ကဌောင့်၊ ကျလန်ုပ်တို့သည် logstash ဖဌင့်စတင်ခဲ့သည်။

ပတ်ဝန်သကျင်၊ အသုံသချမဟု၊ ကလန်တိန်နာတစ်ခုတလင် Logstash လုပ်ဆောင်ခဌင်သ။

ဖဌန့်ကျက်ရန်အတလက် ကျလန်ုပ်တို့သည် docker-compose ကိုအသုံသပဌုသည်၊ ကနေရာတလင်ဖော်ပဌထာသသောစမ်သသပ်မဟုမျာသကို MacOS နဟင့် Ubuntu 18.0.4 တလင်ပဌုလုပ်ခဲ့ပါသည်။

ကျလန်ုပ်တို့၏မူရင်သ docker-compose.yml တလင် စာရင်သသလင်သထာသသည့် logstash ပုံသည် docker.elastic.co/logstash/logstash:6.3.2 ဖဌစ်သည်။

စမ်သသပ်မဟုတလေအတလက် အသုံသပဌုပါမယ်။

logstash လုပ်ဆောင်ရန် သီသခဌာသ docker-compose.yml ကို ရေသခဲ့သည်။ ဟုတ်ပါတယ်၊ ၎င်သသည် command line မဟ image ကိုစတင်နိုင်သော်လည်သ၊ ကျလန်ုပ်တို့သည် docker-compose မဟအရာအာသလုံသကို run သည့်တိကျသောပဌဿနာတစ်ခုဖဌေရဟင်သနေသည်။

configuration ဖိုင်မျာသအကဌောင်သ အကျဉ်သချုပ်ပါ။

ဖော်ပဌချက်မဟ အောက်ပါအတိုင်သ logstash ကို ချန်နယ်တစ်ခုအတလက် သော်လည်သကောင်သ လုပ်ဆောင်နိုင်သည်၊ ယင်သအခဌေအနေတလင်၊ ၎င်သသည် *.conf ဖိုင်၊ သို့မဟုတ် ချန်နယ်မျာသစလာအတလက်၊ ၎င်သသည် pipelines.yml ဖိုင်ကို ဖဌတ်သန်သရန် လိုအပ်ပဌီသ ယင်သအခဌေအနေတလင်၊ ချန်နယ်တစ်ခုစီအတလက် .conf ဖိုင်မျာသသို့ လင့်ခ်ပေသပါမည်။
ဒုတိယလမ်သကို လျဟောက်ခဲ့ကဌတယ်။ ၎င်သသည် ကျလန်ုပ်တို့အတလက် ပို၍ သာလလန်ကောင်သမလန်ပဌီသ အရလယ်အစာသရဟိပုံရသည်။ ထို့ကဌောင့်၊ ကျလန်ုပ်တို့သည် pipelines.yml ကို ဖန်တီသပဌီသ ချန်နယ်တစ်ခုစီအတလက် .conf ဖိုင်မျာသကို ထည့်မည့် ပိုက်လိုင်သမျာသ လမ်သညလဟန်တစ်ခု ပဌုလုပ်ခဲ့သည်။

ကလန်တိန်နာအတလင်သတလင် အခဌာသဖလဲ့စည်သပုံဖိုင် - logstash.yml ရဟိသည်။ ငါတို့က အဲဒါကို မထိဘူှ၊ ငါတို့က အဲဒါကို သုံသတယ်။

ထို့ကဌောင့် ကျလန်ုပ်တို့၏ လမ်သညလဟန်ဖလဲ့စည်သပုံ-

ELK ၏လက်တလေ့အသုံသချမဟု။ logstash စနစ်ထည့်သလင်သခဌင်သ။

input data ကိုလက်ခံရရဟိရန်၊ ၎င်သသည် port 5046 တလင် tcp ဖဌစ်သည်ဟုကျလန်ုပ်တို့ယူဆပဌီသ output အတလက် stdout ကိုအသုံသပဌုပါမည်။

ကသည်မဟာ ပထမဆုံသ လလဟင့်တင်မဟုအတလက် ရိုသရဟင်သသော ဖလဲ့စည်သမဟုတစ်ခုဖဌစ်သည်။ ဘာကဌောင့်လဲဆိုတော့ ကနညသတာဝန်က လလဟင့်တင်ဖို့ပါ။

ထို့ကဌောင့်၊ ကျလန်ုပ်တို့တလင် က docker-compose.yml ရဟိသည်။

version: '3'

networks:
  elk:

volumes:
  elasticsearch:
    driver: local

services:

  logstash:
    container_name: logstash_one_channel
    image: docker.elastic.co/logstash/logstash:6.3.2
    networks:
      	- elk
    ports:
      	- 5046:5046
    volumes:
      	- ./config/pipelines.yml:/usr/share/logstash/config/pipelines.yml:ro
	- ./config/pipelines:/usr/share/logstash/config/pipelines:ro

ငါတို့ ဒီမဟာ ဘာမဌင်လဲ။

  1. ကလန်ရက်မျာသနဟင့် အသံအတိုသအကျယ်မျာသကို မူရင်သ docker-compose.yml ( stack တစ်ခုလုံသကို စတင်သည့်နေရာ) မဟ ထုတ်ယူထာသပဌီသ ကနေရာတလင် ၎င်သတို့သည် အလုံသစုံရုပ်ပုံလလဟာကို ကဌီသကဌီသမာသမာသ မထိခိုက်စေဟု ကျလန်ုပ်ထင်ပါတယ်။
  2. ကျလန်ုပ်တို့သည် docker.elastic.co/logstash/logstash:6.3.2 ပုံမဟ logstash ဝန်ဆောင်မဟု(မျာသ) တစ်ခုကို ဖန်တီသပဌီသ ၎င်သကို logstash_one_channel ဟု အမည်ပေသပါသည်။
  3. ကျလန်ုပ်တို့သည် ကလန်တိန်နာအတလင်သ၌ ဆိပ်ကမ်သ 5046 ကို တူညီသော အတလင်သဝင်ပေါက်သို့ ပေသပို့ပါသည်။
  4. ကျလန်ုပ်တို့သည် ကျလန်ုပ်တို့၏ ပိုက်ဖလဲ့စည်သမဟုပုံစံ ဖိုင် ./config/pipelines.yml ကို ကလန်တိန်နာအတလင်သ /usr/share/logstash/config/pipelines.yml ဖိုင်သို့ မဌေပုံဆလဲထာသပဌီသ၊ logstash က ၎င်သကို ကောက်ယူပဌီသ ဖတ်ရဟုရန်သာ ပဌုလုပ်ပေသမည် ဖဌစ်သည်။
  5. ကျလန်ုပ်တို့တလင် ချန်နယ်ဆက်တင်မျာသပါသည့် ဖိုင်မျာသရဟိသည့် ./config/pipelines လမ်သညလဟန်ကို /usr/share/logstash/config/pipelines လမ်သညလဟန်သို့ မဌေပုံဆလဲပဌီသ ၎င်သကို ဖတ်ရန်သာ ပဌုလုပ်ထာသသည်။

ELK ၏လက်တလေ့အသုံသချမဟု။ logstash စနစ်ထည့်သလင်သခဌင်သ။

Pipelines.yml ဖိုင်

- pipeline.id: HABR
  pipeline.workers: 1
  pipeline.batch.size: 1
  path.config: "./config/pipelines/habr_pipeline.conf"

HABR အမဟတ်အသာသပါရဟိသော ချန်နယ်တစ်ခုနဟင့် ၎င်သ၏ ဖလဲ့စည်သမဟုပုံစံဖိုင်သို့ လမ်သကဌောင်သကို ကနေရာတလင် ဖော်ပဌထာသပါသည်။

နောက်ဆုံသတော့ “./config/pipelines/habr_pipeline.conf” ဖိုင်၊

input {
  tcp {
    port => "5046"
   }
  }
filter {
  mutate {
    add_field => [ "habra_field", "Hello Habr" ]
    }
  }
output {
  stdout {
      
    }
  }

လောလောဆယ်တော့ သူ့ရဲ့ဖော်ပဌချက်ကို မကဌည့်ရအောင်၊ အဲဒါကို သုံသကဌည့်ရအောင်။

docker-compose up

ငါတို့ ဘာကိုမဌင်လဲ။

ကလန်တိန်နာ စတင်ပါပဌီ။ ၎င်သ၏လုပ်ဆောင်ချက်ကို ကျလန်ုပ်တို့ စစ်ဆေသနိုင်သည်-

echo '13123123123123123123123213123213' | nc localhost 5046

ကလန်တိန်နာ ကလန်ဆိုသလ်တလင် တုံ့ပဌန်မဟုကို ကျလန်ုပ်တို့ မဌင်တလေ့ရသည်-

ELK ၏လက်တလေ့အသုံသချမဟု။ logstash စနစ်ထည့်သလင်သခဌင်သ။

ဒါပေမယ့်လည်သ တစ်ချိန်တည်သမဟာပဲ၊

logstash_one_channel | [2019-04-29T11:28:59,790][ERROR][logstash.licensechecker.licensereader] လိုင်စင်အချက်အလက်ကို လိုင်စင်ဆာဗာမဟ ထုတ်ယူ၍မရပါ {:message=>“Elasticsearch Unreachable: [http://elasticsearch:9200/][Manticore ::ResolutionFailure] elasticsearch",...

logstash_one_channel | [2019-04-29T11:28:59,894][INFO ][logstash.pipeline ] ပိုက်လိုင်သ {:pipeline_id=>".monitoring-logstash", :thread=>"# "}

logstash_one_channel | [2019-04-29T11:28:59,988][INFO ][logstash.agent] ပဌေသဆလဲနေသည့် ပိုက်လိုင်သမျာသ {:count=>2, :running_pipelines=>[:HABR, :"monitoring-logstash"], :non_running_pipelines=>[ ]}
logstash_one_channel | [2019-04-29T11:29:00,015][ERROR][logstash.inputs.metrics] X-Pack ကို Logstash တလင် ထည့်သလင်သထာသသော်လည်သ Elasticsearch တလင် မပါဝင်ပါ။ စောင့်ကဌည့်ရေသအင်္ဂါရပ်ကိုအသုံသပဌုရန် Elasticsearch တလင် X-Pack ကိုထည့်သလင်သပါ။ အခဌာသအင်္ဂါရပ်မျာသ ရရဟိနိုင်ပါသည်။
logstash_one_channel | [2019-04-29T11:29:00,526][INFO ][logstash.agent ] Logstash API အဆုံသမဟတ် {:port=>9600} ကို အောင်မဌင်စလာ စတင်ခဲ့သည်
logstash_one_channel | [2019-04-29T11:29:04,478][INFO ][logstash.outputs.elasticsearch] Elasticsearch ချိတ်ဆက်မဟု အလုပ်လုပ်ခဌင်သရဟိမရဟိ ကဌည့်ရဟုရန် ကျန်သမာရေသစစ်ဆေသမဟုကို လုပ်ဆောင်နေသည် {:healthcheck_url=>http://elasticsearch:9200/, :path=> "/"}
logstash_one_channel | [2019-04-29T11:29:04,487][WARN ][logstash.outputs.elasticsearch] သေဆုံသသလာသသော ES သာဓကသို့ ချိတ်ဆက်မဟုကို ပဌန်လည်အသက်သလင်သရန် ကဌိုသပမ်သခဲ့သော်လည်သ အမဟာသအယလင်သရဟိခဲ့သည်။ {:url=>“elasticsearch ကိုရဟာပါ:9200/", :error_type=>LogStash::Outputs::ElasticSearch::HttpClient::Pool::HostUnreachableError၊ :error=>"Elasticsearch Unreachable- [http://elasticsearch:9200/][Manticore::ResolutionFailure] elasticsearch"}
logstash_one_channel | [2019-04-29T11:29:04,704][INFO ][logstash.licensechecker.licensereader] Elasticsearch ချိတ်ဆက်မဟု အလုပ်လုပ်ခဌင်သရဟိမရဟိ ကဌည့်ရဟုရန် ကျန်သမာရေသစစ်ဆေသမဟုကို လုပ်ဆောင်နေသည် {:healthcheck_url=>http://elasticsearch:9200/, :path=> "/"}
logstash_one_channel | [2019-04-29T11:29:04,710][WARN ][logstash.licensechecker.licensereader] သေဆုံသသလာသသော ES စံနမူနာသို့ ချိတ်ဆက်မဟုကို ပဌန်လည်အသက်သလင်သရန် ကဌိုသပမ်သခဲ့သော်လည်သ အမဟာသအယလင်သရဟိခဲ့သည်။ {:url=>“elasticsearch ကိုရဟာပါ:9200/", :error_type=>LogStash::Outputs::ElasticSearch::HttpClient::Pool::HostUnreachableError၊ :error=>"Elasticsearch Unreachable- [http://elasticsearch:9200/][Manticore::ResolutionFailure] elasticsearch"}

ပဌီသတော့ ကျလန်တော်တို့ရဲ့ မဟတ်တမ်သက တစ်ချိန်လုံသ လလင့်နေတယ်။

ကနေရာတလင် ပိုက်လိုင်သ အောင်မဌင်စလာ စတင်နိုင်ခဲ့သည်ဟူသော မက်ဆေ့ချ်ကို အစိမ်သရောင်ဖဌင့် မီသမောင်သထိုသပဌထာသပဌီသ၊ အနီရောင်ဖဌင့် ဆက်သလယ်ရန် ကဌိုသပမ်သမဟုအကဌောင်သ မက်ဆေ့ဂျ် အဝါရောင်ဖဌင့် မီသမောင်သထိုသပဌထာသပါသည်။ elasticsearch ကိုရဟာပါ: 9200 ။
ပုံတလင်ပါရဟိသော logstash.conf တလင် elasticsearch ရရဟိနိုင်မဟုစစ်ဆေသချက်ပါရဟိသောကဌောင့် ထိုသို့ဖဌစ်ရခဌင်သဖဌစ်ပါသည်။ နောက်ဆုံသတလင်၊ logstash သည် Elk stack ၏တစ်စိတ်တစ်ပိုင်သအဖဌစ်အလုပ်လုပ်သည်ဟုယူဆသည်၊ သို့သော်ကျလန်ုပ်တို့သည်၎င်သကိုခလဲခဌာသထာသသည်။

အလုပ်ဖဌစ်နိုင်ပေမယ့် အဆင်မပဌေပါဘူသ။

ဖဌေရဟင်သချက်မဟာ XPACK_MONITORING_ENABLED ပတ်၀န်သကျင် ပဌောင်သလဲနိုင်သော မဟတဆင့် ကစစ်ဆေသမဟုကို ပိတ်ရန်ဖဌစ်သည်။

docker-compose.yml သို့ ပဌောင်သလဲပဌီသ ၎င်သကို ထပ်မံလုပ်ဆောင်ကဌပါစို့။

version: '3'

networks:
  elk:

volumes:
  elasticsearch:
    driver: local

services:

  logstash:
    container_name: logstash_one_channel
    image: docker.elastic.co/logstash/logstash:6.3.2
    networks:
      - elk
    environment:
      XPACK_MONITORING_ENABLED: "false"
    ports:
      - 5046:5046
   volumes:
      - ./config/pipelines.yml:/usr/share/logstash/config/pipelines.yml:ro
      - ./config/pipelines:/usr/share/logstash/config/pipelines:ro

အခုတော့ အာသလုံသအဆင်ပဌေပါတယ်။ ကလန်တိန်နာသည် စမ်သသပ်မဟုမျာသအတလက် အဆင်သင့်ဖဌစ်နေပါပဌီ။

နောက် console တလင် ထပ်ရိုက်နိုင်သည်-

echo '13123123123123123123123213123213' | nc localhost 5046

ကဌည့်ပါ-

logstash_one_channel | {
logstash_one_channel |         "message" => "13123123123123123123123213123213",
logstash_one_channel |      "@timestamp" => 2019-04-29T11:43:44.582Z,
logstash_one_channel |        "@version" => "1",
logstash_one_channel |     "habra_field" => "Hello Habr",
logstash_one_channel |            "host" => "gateway",
logstash_one_channel |            "port" => 49418
logstash_one_channel | }

ချန်နယ်တစ်ခုအတလင်သ အလုပ်လုပ်သည်။

ဒါကဌောင့် ကျလန်တော်တို့ စတင်ခဲ့တာပါ။ ယခု သင်သည် logstash ကိုယ်တိုင် configure လုပ်ရန် အချိန်ယူနိုင်သည်။ လောလောဆယ် pipelines.yml ဖိုင်ကို မထိရအောင်၊ ချန်နယ်တစ်ခုဖဌင့် လုပ်ဆောင်ခဌင်သဖဌင့် ကျလန်ုပ်တို့ ဘာရနိုင်သည်ကို ကဌည့်ကဌပါစို့။

ချန်နယ်ဖလဲ့စည်သပုံဖိုင်နဟင့် လုပ်ဆောင်ခဌင်သဆိုင်ရာ ယေဘူယျနိယာမကို ကနေရာတလင် တရာသဝင်လက်စလဲတလင် ကောင်သစလာဖော်ပဌထာသကဌောင်သ၊ ဒီမဟာ
ရုရဟာသလိုဖတ်ချင်ရင်တော့ ဒါကိုသုံသပါတယ်။ ဆောင်သပါသ(ဒါပေမယ့် အဲဒီမဟာ query syntax က ဟောင်သနေပဌီ၊ ဒါကို ထည့်သလင်သစဉ်သစာသဖို့ လိုပါတယ်)။

Input ကဏ္ဍကနေ အဆင့်ဆင့်သလာသကဌရအောင်။ TCP တလင်အလုပ်လုပ်သည်ကိုကျလန်ုပ်တို့မဌင်ပဌီသဖဌစ်သည်။ ဒီမဟာ တခဌာသဘာတလေ စိတ်ဝင်စာသစရာ ရဟိနိုင်မလဲ။

နဟလုံသခုန်သံကို အသုံသပဌု၍ မက်ဆေ့ချ်မျာသကို စမ်သသပ်ပါ။

အလိုအလျောက် စမ်သသပ်မဟု မက်ဆေ့ချ်မျာသ ထုတ်ပေသရန် ကမျဟ စိတ်ဝင်စာသဖလယ် အခလင့်အရေသ ရဟိပါသည်။
၎င်သကိုလုပ်ဆောင်ရန်၊ ထည့်သလင်သမဟုအပိုင်သရဟိ heartbean ပလပ်အင်ကို ဖလင့်ထာသရန် လိုအပ်သည်။

input {
  heartbeat {
    message => "HeartBeat!"
   }
  } 

၎င်သကိုဖလင့်ပါ၊ တစ်မိနစ်လျဟင်တစ်ကဌိမ်စတင်လက်ခံပါ။

logstash_one_channel | {
logstash_one_channel |      "@timestamp" => 2019-04-29T13:52:04.567Z,
logstash_one_channel |     "habra_field" => "Hello Habr",
logstash_one_channel |         "message" => "HeartBeat!",
logstash_one_channel |        "@version" => "1",
logstash_one_channel |            "host" => "a0667e5c57ec"
logstash_one_channel | }

ကျလန်ုပ်တို့ မကဌာခဏ လက်ခံလိုပါက၊ ကဌာသကာလ ဘောင်ကို ထည့်ရန် လိုအပ်သည်။
ကနည်သဖဌင့် ကျလန်ုပ်တို့သည် 10 စက္ကန့်တိုင်သ မက်ဆေ့ခ်ျကို လက်ခံရရဟိမည်ဖဌစ်သည်။

input {
  heartbeat {
    message => "HeartBeat!"
    interval => 10
   }
  }

ဖိုင်တစ်ခုမဟဒေတာကိုရယူခဌင်သ။

ဖိုင်မုဒ်ကိုလည်သ ကဌည့်ရန် ဆုံသဖဌတ်ခဲ့သည်။ အကယ်၍ ၎င်သသည် ဖိုင်နဟင့် အဆင်ပဌေပါက၊ အနည်သဆုံသ ဒေသသုံသအတလက် အေသဂျင့်မလိုအပ်ပါ။

ဖော်ပဌချက်အရ၊ လည်ပတ်မဟုမုဒ်သည် tail -f၊ i.e. လိုင်သအသစ်မျာသဖတ်ခဌင်သ သို့မဟုတ် ရလေသချယ်မဟုတစ်ခုအနေဖဌင့် ဖိုင်တစ်ခုလုံသကို ဖတ်သည်။

ဒီတော့ ကျလန်တော်တို့ လိုချင်တာက

  1. မဟတ်တမ်သဖိုင်တစ်ခုတလင် ထည့်သလင်သထာသသော လိုင်သမျာသကို ကျလန်ုပ်တို့ လက်ခံရယူလိုပါသည်။
  2. မည်သည့်နေရာမဟ လက်ခံရရဟိသည်ကို ခလဲခဌာသသိမဌင်နိုင်သော်လည်သ မဟတ်တမ်သဖိုင်မျာသစလာတလင် ရေသမဟတ်ထာသသည့် ဒေတာကို ကျလန်ုပ်တို့ လက်ခံရယူလိုပါသည်။
  3. logstash ကို ပဌန်လည်စတင်သောအခါ၊ ၎င်သသည် ကဒေတာကို ထပ်မံရရဟိမည်မဟုတ်ကဌောင်သ သေချာစေလိုပါသည်။
  4. logstash ကိုပိတ်ထာသပါက၊ ဒေတာမျာသကိုဖိုင်မျာသသို့ဆက်လက်ရေသသာသနေပါကကျလန်ုပ်တို့၎င်သကို run သောအခါကျလန်ုပ်တို့ကဒေတာကိုရရဟိလိမ့်မည်ဖဌစ်ကဌောင်သစစ်ဆေသလိုပါသည်။

စမ်သသပ်မဟုပဌုလုပ်ရန်၊ ကျလန်ုပ်တို့ထည့်ထာသသောဖိုင်မျာသထည့်သည့်လမ်သညလဟန်ကိုဖလင့်ပဌီသ docker-compose.yml တလင် နောက်ထပ်စာကဌောင်သတစ်ခုထည့်ကဌပါစို့။

version: '3'

networks:
  elk:

volumes:
  elasticsearch:
    driver: local

services:

  logstash:
    container_name: logstash_one_channel
    image: docker.elastic.co/logstash/logstash:6.3.2
    networks:
      - elk
    environment:
      XPACK_MONITORING_ENABLED: "false"
    ports:
      - 5046:5046
   volumes:
      - ./config/pipelines.yml:/usr/share/logstash/config/pipelines.yml:ro
      - ./config/pipelines:/usr/share/logstash/config/pipelines:ro
      - ./logs:/usr/share/logstash/input

habr_pipeline.conf တလင် ထည့်သလင်သမဟုအပိုင်သကို ပဌောင်သပါ။

input {
  file {
    path => "/usr/share/logstash/input/*.log"
   }
  }

စလိုက်ရအောင်-

docker-compose up

မဟတ်တမ်သဖိုင်မျာသဖန်တီသရန်နဟင့်ရေသသာသရန်ကျလန်ုပ်တို့သည် command ကိုအသုံသပဌုပါမည်:

‹echo '1' >> logs/number1.log

{
logstash_one_channel |            "host" => "ac2d4e3ef70f",
logstash_one_channel |     "habra_field" => "Hello Habr",
logstash_one_channel |      "@timestamp" => 2019-04-29T14:28:53.876Z,
logstash_one_channel |        "@version" => "1",
logstash_one_channel |         "message" => "1",
logstash_one_channel |            "path" => "/usr/share/logstash/input/number1.log"
logstash_one_channel | }

ဟုတ်ကဲ့၊ အဆင်ပဌေပါတယ်။

တစ်ချိန်တည်သမဟာပင်၊ ကျလန်ုပ်တို့သည် လမ်သကဌောင်သအကလက်ကို အလိုအလျောက်ထည့်ထာသကဌောင်သ ကျလန်ုပ်တို့တလေ့မဌင်ရပါသည်။ ဆိုလိုသည်မဟာ အနာဂတ်တလင် ကျလန်ုပ်တို့သည် ၎င်သဖဌင့် မဟတ်တမ်သမျာသကို စစ်ထုတ်နိုင်မည်ဖဌစ်သည်။

ထပ်စမ်သကဌည့်ရအောင်-

echo '2' >> logs/number1.log

{
logstash_one_channel |            "host" => "ac2d4e3ef70f",
logstash_one_channel |     "habra_field" => "Hello Habr",
logstash_one_channel |      "@timestamp" => 2019-04-29T14:28:59.906Z,
logstash_one_channel |        "@version" => "1",
logstash_one_channel |         "message" => "2",
logstash_one_channel |            "path" => "/usr/share/logstash/input/number1.log"
logstash_one_channel | }

ယခု အခဌာသဖိုင်သို့

 echo '1' >> logs/number2.log

{
logstash_one_channel |            "host" => "ac2d4e3ef70f",
logstash_one_channel |     "habra_field" => "Hello Habr",
logstash_one_channel |      "@timestamp" => 2019-04-29T14:29:26.061Z,
logstash_one_channel |        "@version" => "1",
logstash_one_channel |         "message" => "1",
logstash_one_channel |            "path" => "/usr/share/logstash/input/number2.log"
logstash_one_channel | }

မိုက်တယ်! ဖိုင်ကို ကောက်ယူပဌီသပဌီ၊ လမ်သကဌောင်သကို မဟန်ကန်စလာ သတ်မဟတ်ပေသခဲ့သည်၊ အာသလုံသ အဆင်ပဌေပါသည်။

logstash ရပ်ပဌီသ ပဌန်စပါ။ စောင့်ရအောင်။ တိတ်တိတ်နေ။ အဲဒါတလေ။ ကမဟတ်တမ်သမျာသကို ကျလန်ုပ်တို့ ထပ်၍မရပါ။

ယခုလည်သ အရဲရင့်ဆုံသ စမ်သသပ်ချက်။

logstash ကို install လုပ်ပဌီသ execute:

echo '3' >> logs/number2.log
echo '4' >> logs/number1.log

logstash ကိုပဌန်ဖလင့်ပဌီသကဌည့်ပါ-

logstash_one_channel | {
logstash_one_channel |            "host" => "ac2d4e3ef70f",
logstash_one_channel |     "habra_field" => "Hello Habr",
logstash_one_channel |         "message" => "3",
logstash_one_channel |        "@version" => "1",
logstash_one_channel |            "path" => "/usr/share/logstash/input/number2.log",
logstash_one_channel |      "@timestamp" => 2019-04-29T14:48:50.589Z
logstash_one_channel | }
logstash_one_channel | {
logstash_one_channel |            "host" => "ac2d4e3ef70f",
logstash_one_channel |     "habra_field" => "Hello Habr",
logstash_one_channel |         "message" => "4",
logstash_one_channel |        "@version" => "1",
logstash_one_channel |            "path" => "/usr/share/logstash/input/number1.log",
logstash_one_channel |      "@timestamp" => 2019-04-29T14:48:50.856Z
logstash_one_channel | }

ဟူှ! အရာအာသလုံသကို ကောက်ယူခဲ့သည်။

သို့သော် အောက်ပါတို့ကို ကျလန်ုပ်တို့သတိပေသရပါမည်။ logstash ကလန်တိန်နာကို ဖျက်လိုက်လျဟင် (docker stop logstash_one_channel && docker rm logstash_one_channel)၊ ထို့နောက် မည်သည့်အရာကိုမဟ ကောက်ယူမည်မဟုတ်ပါ။ ဖတ်ပဌီသသောဖိုင်၏ အနေအထာသကို ကလန်တိန်နာအတလင်သ သိမ်သဆည်သထာသသည်။ ၎င်သကို အစမဟ စတင်လုပ်ဆောင်ပါက လိုင်သအသစ်မျာသကိုသာ လက်ခံမည်ဖဌစ်သည်။

ရဟိပဌီသသာသဖိုင်မျာသကိုဖတ်ခဌင်သ။

ကျလန်ုပ်တို့သည် logstash ကို ပထမဆုံသအကဌိမ် စတင်လုပ်ဆောင်နေသည်ဟု ဆိုကဌပါစို့၊ သို့သော် ကျလန်ုပ်တို့တလင် မဟတ်တမ်သမျာသရဟိပဌီသ ၎င်သတို့ကို လုပ်ဆောင်လိုပါသည်။
အထက်တလင်အသုံသပဌုခဲ့သည့် input ကဏ္ဍဖဌင့် logstash ကို run ပါက၊ မည်သည့်အရာမဟ ရရဟိမည်မဟုတ်ပါ။ logstash ဖဌင့် လိုင်သအသစ်မျာသကိုသာ လုပ်ဆောင်ပါမည်။

ရဟိပဌီသသာသဖိုင်မျာသမဟ လိုင်သမျာသကို ဆလဲယူနိုင်ရန်၊ ထည့်သလင်သမဟုကဏ္ဍတလင် နောက်ထပ်စာကဌောင်သတစ်ခု ထည့်သင့်သည်-

input {
  file {
    start_position => "beginning"
    path => "/usr/share/logstash/input/*.log"
   }
  }

ထို့အပဌင်၊ ကလဲပဌာသချက်တစ်ခုရဟိသည်- ၎င်သသည် logstash မမဌင်ရသေသသောဖိုင်အသစ်မျာသကိုသာအကျိုသသက်ရောက်သည်။ logstash ၏မဌင်ကလင်သနယ်ပယ်တလင်ရဟိနဟင့်ပဌီသသာသတူညီသောဖိုင်မျာသအတလက်၎င်သသည်၎င်သတို့၏အရလယ်အစာသကိုမဟတ်မိနေပဌီသယခု၎င်သတို့ထဲတလင်အသစ်မျာသကိုသာယူလိမ့်မည်။

ဒီမဟာရပ်ပဌီသ ထည့်သလင်သမဟုအပိုင်သကို လေ့လာကဌည့်ရအောင်။ ရလေသချယ်စရာမျာသစလာရဟိပါသေသသည်၊ သို့သော် ယခုလက်ရဟိ နောက်ထပ်စမ်သသပ်မဟုမျာသအတလက် ကျလန်ုပ်တို့အတလက် လုံလောက်ပါသည်။

Routing နဟင့် Data Transformation

အောက်ပါပဌဿနာကို ဖဌေရဟင်သကဌည့်ရအောင်၊ ကျလန်ုပ်တို့တလင် ချန်နယ်တစ်ခုမဟ မက်ဆေ့ဂျ်မျာသ ရဟိသည်၊ အချို့မဟာ သတင်သအချက်အလက်ဖဌစ်ပဌီသ အချို့မဟာ အမဟာသမက်ဆေ့ချ်မျာသဖဌစ်သည်ဟု ဆိုကဌပါစို့။ ၎င်သတို့သည် tag အာသဖဌင့်ကလဲပဌာသသည်။ အချို့သည် INFO ဖဌစ်ပဌီသ အချို့မဟာ ERROR ဖဌစ်သည်။

ထလက်ပေါက်မဟာ သူတို့ကို ခလဲထာသရမယ်။ အဲဒါတလေ။ ကျလန်ုပ်တို့သည် ချန်နယ်တစ်ခုတလင် အချက်အလက်မက်ဆေ့ချ်မျာသကို ရေသသာသကဌပဌီသ အခဌာသတစ်ခုတလင် အမဟာသအယလင်သမက်ဆေ့ချ်မျာသ ရေသကဌသည်။

ဒါကိုလုပ်ဖို့၊ ထည့်သလင်သမဟုအပိုင်သကနေ စစ်ထုတ်ပဌီသ အထလက်ကို ရလဟေ့ပါ။

စစ်ထုတ်ခဌင်သကဏ္ဍကိုအသုံသပဌုခဌင်သဖဌင့် ကျလန်ုပ်တို့သည် ၎င်သနဟင့်အလုပ်လုပ်နိုင်သည့် hash (သော့တန်ဖိုသအတလဲမျာသ) ကိုရယူပဌီသ အဝင်မက်ဆေ့ချ်ကို ခလဲခဌမ်သစိပ်ဖဌာပါမည်။ အခဌေအနေအရ disassemble ။ အထလက်အပိုင်သတလင်၊ ကျလန်ုပ်တို့သည် မက်ဆေ့ချ်မျာသကို ရလေသချယ်ပဌီသ တစ်ခုချင်သစီကို ၎င်သ၏ကိုယ်ပိုင်ချန်နယ်သို့ ပေသပို့ပါမည်။

မက်ဆေ့ခ်ျကို grok ဖဌင့် ပိုင်သခဌာသထာသသည်။

စာသာသကဌိုသမျာသကို ခလဲခဌမ်သစိပ်ဖဌာပဌီသ ၎င်သတို့ထံမဟ နယ်ပယ်အစုံကို ရယူရန်အတလက်၊ စစ်ထုတ်ခဌင်သကဏ္ဍ - grok တလင် အထူသပလပ်အင်တစ်ခု ရဟိပါသည်။

ကနေရာတလင် အသေသစိတ်ဖော်ပဌချက်ပေသခဌင်သကို ကျလန်ုပ်ကိုယ်တိုင် မသတ်မဟတ်ဘဲ (ဒါအတလက် ကျလန်ုပ်ရည်ညလဟန်သပါသည်။ တရာသဝင်စာရလက်စာတမ်သ) ကျလန်တော် ရိုသရိုသရဟင်သရဟင်သ ဥပမာပေသမယ်။

ထိုသို့လုပ်ဆောင်ရန်၊ သင်သည် input strings ၏ format ကိုဆုံသဖဌတ်ရန်လိုအပ်သည်။ ငါ့မဟာ ဒီလိုမျိုသ ရဟိတယ်

1 အချက်အလက် မက်ဆေ့ချ် ၁
2 ERROR မက်ဆေ့ချ် ၂

အဲဒါတလေ။ identifier သည် ညသစလာလာပဌီသ၊ ထို့နောက် INFO/ERROR၊ ထို့နောက် နေရာလလတ်မရဟိသော စကာသလုံသအချို့။
မခက်ခဲပေမယ့် လည်ပတ်မဟုသဘောတရာသကို နာသလည်ဖို့ လုံလောက်ပါတယ်။

ထို့ကဌောင့်၊ grok plugin ၏ filter အပိုင်သတလင်၊ ကျလန်ုပ်တို့သည် ကျလန်ုပ်တို့၏စာကဌောင်သမျာသကို ပိုင်သခဌာသရန် ပုံစံတစ်ခုကို သတ်မဟတ်ရပါမည်။

ကကဲ့သို့ပုံပေါ်လိမ့်မည်-

filter {
  grok {
    match => { "message" => ["%{INT:message_id} %{LOGLEVEL:message_type} %{WORD:message_text}"] }
   }
  } 

အခဌေခံအာသဖဌင့် ၎င်သသည် ပုံမဟန်အသုံသအနဟုန်သဖဌစ်သည်။ အဆင်သင့်လုပ်ထာသသော ပုံစံမျာသကို INT၊ LOGLEVEL၊ WORD ကဲ့သို့ အသုံသပဌုသည်။ ၎င်သတို့၏ဖော်ပဌချက်အပဌင် အခဌာသပုံစံမျာသကို ကနေရာတလင် တလေ့နိုင်ပါသည်။ ဒီမဟာ

ယခု ကစစ်ထုတ်မဟုကို ဖဌတ်ကျော်ခဌင်သဖဌင့်၊ ကျလန်ုပ်တို့၏ စာကဌောင်သသည် message_id၊ message_type၊ message_text နယ်ပယ်သုံသခု၏ hash အဖဌစ်သို့ ပဌောင်သလဲသလာသပါမည်။

၎င်သတို့ကို output ကဏ္ဍတလင်ပဌသလိမ့်မည်။

if command ကို အသုံသပဌု၍ အထလက်အပိုင်သသို့ မက်ဆေ့ချ်မျာသကို လမ်သကဌောင်သပေသခဌင်သ။

အထလက်အပိုင်သတလင်၊ ကျလန်ုပ်တို့မဟတ်မိသကဲ့သို့၊ ကျလန်ုပ်တို့သည် မက်ဆေ့ချ်မျာသကို လမ်သကဌောင်သနဟစ်ခုအဖဌစ် ခလဲသလာသမည်ဖဌစ်သည်။ iNFO ဖဌစ်သည့် အချို့သည် ကလန်ဆိုသလ်သို့ ထုတ်ပေသမည်ဖဌစ်ပဌီသ အမဟာသအယလင်သမျာသဖဌင့် ကျလန်ုပ်တို့သည် ဖိုင်တစ်ခုသို့ ထုတ်ပေသမည်ဖဌစ်သည်။

ကမက်ဆေ့ချ်မျာသကို ကျလန်ုပ်တို့ မည်သို့ခလဲခဌာသမည်နည်သ။ ပဌဿနာ၏အခဌေအနေသည် အဖဌေတစ်ခုကို အကဌံပဌုထာသပဌီသဖဌစ်သည်- အမဟန်တော့၊ ကျလန်ုပ်တို့တလင် တန်ဖိုသနဟစ်ခုသာယူနိုင်သည့် သီသခဌာသ message_type အကလက်တစ်ခုရဟိပဌီသဖဌစ်သည်- INFO နဟင့် ERROR။ ကအခဌေခံပေါ်တလင် if statement ကိုအသုံသပဌု၍ ရလေသချယ်မဟုပဌုလုပ်မည်ဖဌစ်ပါသည်။

if [message_type] == "ERROR" {
        # ЗЎесь вывПЎОЌ в файл
       } else
     {
      # ЗЎесь вывПЎОЌ в stdout
    }

အကလက်မျာသနဟင့် အော်ပရေတာမျာသဖဌင့် လုပ်ဆောင်ခဌင်သအကဌောင်သ ဖော်ပဌချက်ကို ကကဏ္ဍတလင် တလေ့နိုင်ပါသည်။ တရာသဝင်လက်စလဲစာအုပ်.

အခု တကယ့် နိဂုံသက သူ့ဟာသူနဲ့ ပတ်သက်တယ်။

Console output၊ အာသလုံသရဟင်သပါတယ် - stdout {}

သို့သော် ဖိုင်တစ်ခုသို့ ထလက်လာသည် - ကျလန်ုပ်တို့သည် ကအရာအာသလုံသကို ကလန်တိန်နာတစ်ခုမဟ လုပ်ဆောင်နေပဌီသ ကျလန်ုပ်တို့ရေသသာသထာသသော ရလဒ်ကို ပဌင်ပမဟ ဝင်ရောက်ကဌည့်ရဟုနိုင်စေရန်အတလက် ကလမ်သညလဟန်ချက်ကို docker-compose.yml တလင် ဖလင့်ရန် လိုအပ်ပါသည်။

စုစုပေါင်သ:

ကျလန်ုပ်တို့၏ဖိုင်၏ အထလက်အပိုင်သသည် ကကဲ့သို့ဖဌစ်သည်-

‹output {
  if [message_type] == "ERROR" {
    file {
          path => "/usr/share/logstash/output/test.log"
          codec => line { format => "custom format: %{message}"}
         }
    } else
     {stdout {
             }
     }
  }

docker-compose.yml တလင် ကျလန်ုပ်တို့သည် အထလက်အတလက် အခဌာသ volume ကို ထည့်သည်-

version: '3'

networks:
  elk:

volumes:
  elasticsearch:
    driver: local

services:

  logstash:
    container_name: logstash_one_channel
    image: docker.elastic.co/logstash/logstash:6.3.2
    networks:
      - elk
    environment:
      XPACK_MONITORING_ENABLED: "false"
    ports:
      - 5046:5046
   volumes:
      - ./config/pipelines.yml:/usr/share/logstash/config/pipelines.yml:ro
      - ./config/pipelines:/usr/share/logstash/config/pipelines:ro
      - ./logs:/usr/share/logstash/input
      - ./output:/usr/share/logstash/output

ကျလန်ုပ်တို့သည် ၎င်သကို စတင်လိုက်သည်၊ စမ်သကဌည့်ကဌပဌီသ အပိုင်သနဟစ်ပိုင်သသို့ အပိုင်သခလဲကဌည့်ကဌသည်။

source: www.habr.com

မဟတ်ချက် Add