د ELK عملي غوښتنلیک. د لوګسټاش تنظیم کول

پېژندنه

د بل سیسټم د ځای پرځای کولو پرمهال، موږ د ډیری مختلف لاګونو پروسس کولو اړتیا سره مخ شو. ELK د وسیلې په توګه غوره شوی و. دا مقاله به د دې سټیک تنظیم کولو کې زموږ تجربې په اړه بحث وکړي.

موږ د ټولو وړتیاوو د بیانولو لپاره هدف نه ټاکلو، مګر موږ غواړو چې په ځانګړې توګه د عملي ستونزو حلولو تمرکز وکړو. دا د دې حقیقت له امله دی چې که څه هم په کافي اندازه اسناد او چمتو شوي عکسونه شتون لري ، لږ تر لږه موږ یې موندلي.

موږ سټیک د ډاکر - کمپوز له لارې ځای په ځای کړ. سربیره پردې، موږ یو ښه لیکل شوی docker-compose.yml درلود، کوم چې موږ ته اجازه راکړه چې پرته له کومې ستونزې څخه سټیک پورته کړو. او موږ ته داسې بریښي چې بریا لا دمخه نږدې وه ، اوس به موږ دا د خپلو اړتیاو سره سم یو څه ټیک کړو او بس.

له بده مرغه، زموږ د غوښتنلیک څخه د لاګونو ترلاسه کولو او پروسس کولو لپاره د سیسټم تنظیم کولو هڅه سمدستي بریالۍ نه وه. له همدې امله، موږ پریکړه وکړه چې دا د هرې برخې په جلا توګه مطالعه کولو ارزښت لري، او بیا د دوی اړیکو ته راستانه شوي.

نو، موږ د لوګسټاش سره پیل وکړ.

چاپیریال، ځای پرځای کول، په کانټینر کې د Logstash چلول

د ګمارلو لپاره موږ د ډاکر کمپوز کاروو؛ هغه تجربې چې دلته تشریح شوي په MacOS او Ubuntu 18.0.4 کې ترسره شوي.

د لوګسټاش عکس چې زموږ په اصلي ډاکر-compose.yml کې ثبت شوی و docker.elastic.co/logstash/logstash:6.3.2

موږ به یې د تجربو لپاره وکاروو.

موږ د لوګسټاش چلولو لپاره جلا docker-compose.yml ولیکه. البته ، دا ممکنه وه چې عکس د کمانډ لاین څخه لانچ کړئ ، مګر موږ یوه ځانګړې ستونزه حل کوو ، چیرې چې موږ هرڅه د ډاکر - کمپوز څخه پرمخ وړو.

په لنډه توګه د تشکیلاتو فایلونو په اړه

لکه څنګه چې د توضیحاتو څخه په لاندې ډول دي، لوګسټاش یا د یو چینل لپاره چلول کیدی شي، په کوم حالت کې دا اړتیا لري چې د *.conf فایل انتقال کړي، یا د څو چینلونو لپاره، په دې حالت کې دا د pipelines.yml فایل تیرولو ته اړتیا لري، چې په پایله کې. د هر چینل لپاره به د .conf فایلونو سره اړیکه ونیسي.
موږ دوهمه لاره غوره کړه. دا موږ ته ډیر نړیوال او د توزیع وړ ښکاري. له همدې امله، موږ pipelines.yml جوړ کړ، او د پایپ لاین لارښود یې جوړ کړ چې موږ به د هر چینل لپاره .conf فایلونه واچوو.

د کانټینر دننه یو بل ترتیب فایل شتون لري - logstash.yml. موږ ورته لاس نه ورکوو، موږ یې لکه څنګه چې کاروو.

نو، زموږ د لارښود جوړښت:

د ELK عملي غوښتنلیک. د لوګسټاش تنظیم کول

د ان پټ ډیټا ترلاسه کولو لپاره ، د اوس لپاره موږ فرض کوو چې دا په پورټ 5046 کې tcp دی ، او د محصول لپاره به موږ 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 څخه اخیستل شوي (هغه یو چیرې چې ټول سټیک په لاره اچول شوی) او زه فکر کوم چې دوی دلته په عمومي عکس خورا ډیر تاثیر نه کوي.
  2. موږ د docker.elastic.co/logstash/logstash:6.3.2 انځور څخه یو لوګسټاش خدمتونه جوړوو او نوم یې logstash_one_channel ورکوو.
  3. موږ د کانټینر دننه 5046 پورټ ورته داخلي بندر ته لیږو.
  4. موږ زموږ د پایپ ترتیب کولو فایل ./config/pipelines.yml په کانټینر کې دننه /usr/share/logstash/config/pipelines.yml فایل ته نقشه کوو، چیرته چې لوګسټاش به دا پورته کړي او یوازې د لوستلو لپاره یې جوړ کړي.
  5. موږ د ./config/pipelines ډایرکټر نقشه کوو، چیرته چې موږ د چینل ترتیباتو سره فایلونه لرو، په /usr/share/logstash/config/pipelines ډایرکټر کې او دا یوازې د لوستلو لپاره جوړوي.

د ELK عملي غوښتنلیک. د لوګسټاش تنظیم کول

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_one_channel | [2019-04-29T11:28:59,790][ERROR][logstash.licensechecker.licensereader] د جواز سرور څخه د جواز معلوماتو ترلاسه کولو توان نلري {:message=>"Elasticsearch د لاسرسي وړ نه دی: [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] ایکس پیک په 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=>"د:9200/", :error_type=>LogStash::Outputs::ElasticSearch::HttpClient::Pool::HostUnreachableError, :error=>"Elasticsearch د لاسرسي وړ نه دی: [http://elasticsearch:9200/][Manticore::ResolutionFa' 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=>"د:9200/", :error_type=>LogStash::Outputs::ElasticSearch::HttpClient::Pool::HostUnreachableError, :error=>"Elasticsearch د لاسرسي وړ نه دی: [http://elasticsearch:9200/][Manticore::ResolutionFa' elasticsearch"}

او زموږ لاګ هر وخت راپورته کیږي.

دلته ما په شنه کې هغه پیغام روښانه کړی چې پایپ لاین په بریالیتوب سره پیل شوی، په سور کې د خطا پیغام او په ژیړ کې د تماس د هڅې په اړه پیغام د9200.
دا پیښیږي ځکه چې logstash.conf، په عکس کې شامل دی، د elasticsearch شتون لپاره چک لري. په هرصورت، لوګسټاش فرض کوي چې دا د ایلک سټیک برخې په توګه کار کوي، مګر موږ یې جلا کړ.

دا کار کول ممکن دي، مګر دا اسانه ندي.

د حل لاره دا ده چې دا چیک د 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

اوس، هر څه سم دي. کانتینر د تجربو لپاره چمتو دی.

موږ کولی شو په راتلونکي کنسول کې بیا ټایپ کړو:

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 | }

په یو چینل کې کار کول

نو موږ پیل کړ. اوس تاسو کولی شئ واقعیا د لوګسټاش تنظیم کولو لپاره وخت ونیسئ. راځئ چې د اوس لپاره pipelines.yml فایل ته لاس ورنکړو، راځئ وګورو چې موږ د یو چینل سره کار کولو سره څه ترلاسه کولی شو.

زه باید ووایم چې د چینل ترتیب کولو فایل سره د کار کولو عمومي اصول دلته په رسمي لارښود کې ښه تشریح شوي دلته
که تاسو غواړئ په روسیه کې ولولئ، موږ دا کاروو مقاله(مګر د پوښتنې ترکیب زوړ دی، موږ باید دا په پام کې ونیسو).

راځئ چې د ان پټ برخې څخه په ترتیب سره لاړ شو. موږ دمخه په TCP کې کار لیدلی دی. دلته نور څه په زړه پوري کیدی شي؟

د زړه ضربان په کارولو سره د پیغامونو ازموینه

د اتوماتیک ازموینې پیغامونو رامینځته کولو لپاره دومره په زړه پوري فرصت شتون لري.
د دې کولو لپاره ، تاسو اړتیا لرئ د ان پټ برخې کې د زړه بین پلگ ان فعال کړئ.

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. موږ غواړو ډاډ ترلاسه کړو چې کله لوګسټاش بیا پیل شي، دا بیا دا ډاټا نه ترلاسه کوي.
  4. موږ غواړو وګورو چې که لوګسټاش بند شوی وي، او ډاټا فایلونو ته لیکلو ته دوام ورکوي، نو کله چې موږ یې چلوو، موږ به دا ډاټا ترلاسه کړو.

د تجربې د ترسره کولو لپاره، راځئ چې په 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

د لاګ فایلونو جوړولو او لیکلو لپاره موږ به کمانډ وکاروو:


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 | }

غوره! فایل پورته شو، لاره په سمه توګه مشخص شوې، هرڅه سم دي.

لوګسټاش بند کړئ او بیا پیل کړئ. راځئ چې انتظار وکړو. چوپتیا. هغوی. موږ دا ریکارډونه بیا نه ترلاسه کوو.

او اوس ترټولو زړور تجربه.

لوګسټاش نصب کړئ او اجرا کړئ:

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

بیا لوګسټاش چل کړئ او وګورئ:

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_one_channel && docker rm logstash_one_channel)، نو هیڅ شی به نه پورته کیږي. د فایل موقعیت تر هغه پورې چې لوستل شوی و په کانټینر کې زیرمه شوی و. که تاسو دا له سکریچ څخه پرمخ وړئ ، نو دا به یوازې نوې کرښې ومني.

د موجوده فایلونو لوستل

راځئ چې ووایو موږ د لومړي ځل لپاره لوګسټاش پیل کوو، مګر موږ لا دمخه لاګونه لرو او موږ غواړو چې پروسس کړو.
که موږ د ان پټ برخې سره لوګسټاش چلوو چې موږ پورته کارولې، موږ به هیڅ شی ترلاسه نه کړو. یوازې نوې کرښې به د لوګسټاش لخوا پروسس شي.

د دې لپاره چې د موجوده فایلونو څخه لینونه پورته شي، تاسو باید د ان پټ برخې ته اضافي کرښه اضافه کړئ:

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

برسېره پردې، یو نزاکت شتون لري: دا یوازې نوي فایلونه اغیزه کوي چې لاګسټاش تراوسه ندي لیدلي. د ورته فایلونو لپاره چې دمخه د لوګسټاش لید په ساحه کې وو ، دا دمخه د دوی اندازه په یاد ساتلې او اوس به یوازې په دوی کې نوې ننوتنې واخلي.

راځئ چې دلته ودریږو او د ننوتلو برخه مطالعه کړو. لاهم ډیری اختیارونه شتون لري ، مګر دا زموږ لپاره د اوس لپاره د نورو تجربو لپاره کافي دي.

روټینګ او د معلوماتو بدلون

راځئ هڅه وکړو چې لاندې ستونزه حل کړو، راځئ چې ووایو موږ د یو چینل پیغامونه لرو، ځینې یې معلوماتي دي، او ځینې یې د خطا پیغامونه دي. دوی د ټګ له مخې توپیر لري. ځینې ​​یې INFO دي، نور یې ERROR دي.

موږ باید دوی د وتلو په وخت کې جلا کړو. هغوی. موږ په یوه چینل کې د معلوماتو پیغامونه لیکو، او په بل کې د خطا پیغامونه.

د دې کولو لپاره، د ان پټ برخې څخه فلټر او محصول ته لاړ شئ.

د فلټر برخې په کارولو سره، موږ به راتلونکی پیغام تجزیه کړو، له هغې څخه یو هش (کلیدي ارزښت جوړه) ترلاسه کړو، کوم چې موږ کولی شو مخکې له دې کار وکړو، د بیلګې په توګه. د شرایطو سره سم جلا کول. او د محصول برخه کې، موږ به پیغامونه وټاکو او هر یو به خپل چینل ته واستوو.

د ګروک سره یو پیغام پارس کول

د متن تارونو پارس کولو او له دوی څخه د ساحو سیټ ترلاسه کولو لپاره ، د فلټر برخه کې یو ځانګړی پلگ ان شتون لري - grok.

پرته له دې چې خپل ځان ته هدف وټاکم چې دلته یې تفصیلي توضیحات وړاندې کړم (د دې لپاره زه مراجعه کوم رسمي اسناد)، زه به خپل ساده مثال ورکړم.

د دې کولو لپاره، تاسو اړتیا لرئ چې د ان پټ تارونو په بڼه پریکړه وکړئ. زه یې داسې لرم:

1 د معلوماتو پیغام 1
2 د خطا پیغام2

هغوی. پیژندونکی لومړی راځي، بیا INFO/ERROR، بیا ځینې کلمې پرته له ځای څخه.
دا ستونزمنه نه ده، مګر دا د عملیاتو اصولو پوهیدو لپاره کافي دي.

نو، د ګروک پلگ ان د فلټر برخه کې، موږ باید زموږ د تارونو د پارس کولو لپاره یوه نمونه تعریف کړو.

دا به داسې ښکاري:

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

په اصل کې دا یو منظم بیان دی. چمتو شوي نمونې کارول کیږي، لکه INT، LOGLEVEL، WORD. د دوی توضیحات، او همدارنګه نور نمونې، دلته موندل کیدی شي دلته

اوس ، د دې فلټر څخه تیریدو سره ، زموږ تار به د دریو برخو په هش بدل شي: message_id ، message_type ، message_text.

دوی به د محصول برخه کې ښودل شي.

د if کمانډ په کارولو سره د محصول برخې ته پیغامونه لیږدول

د محصول برخه کې، لکه څنګه چې موږ یادونه کوو، موږ به پیغامونه په دوو جریانونو ویشلو. ځینې ​​​​- کوم چې iNFO دي، کنسول ته به تولید شي، او د غلطیو سره، موږ به فایل ته تولید کړو.

موږ دا پیغامونه څنګه جلا کوو؟ د ستونزې حالت لا دمخه د حل وړاندیز کوي - په هرصورت ، موږ دمخه د پیغام_ټایپ ساحه لرو ، کوم چې کولی شي یوازې دوه ارزښتونه واخلي: INFO او ERROR. دا په دې اساس دی چې موږ به د if بیان په کارولو سره انتخاب وکړو.

if [message_type] == "ERROR" {
        # Здесь выводим в файл
       } else
     {
      # Здесь выводим в stdout
    }

د ساحو او چلونکو سره د کار کولو توضیحات پدې برخه کې موندل کیدی شي رسمي لارښود.

اوس، پخپله د اصلي پایلې په اړه.

د کنسول محصول، دلته هرڅه روښانه دي - 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 کې موږ د محصول لپاره بل حجم اضافه کوو:

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

موږ یې پیل کوو، هڅه یې کوو، او په دوو جریانونو ویشل وګورو.

سرچینه: www.habr.com

Add a comment