የ ELK ተግባራዊ መተግበሪያ. ሎግስታሽ በማዘጋጀት ላይ

መግቢያ

ሌላ ስርዓት እየዘረጋን እያለ ብዙ ቁጥር ያላቸው የተለያዩ ምዝግብ ማስታወሻዎችን የማስኬድ አስፈላጊነት አጋጥሞናል። ELK እንደ መሳሪያ ተመርጧል. ይህ ጽሑፍ ይህን ቁልል በማዘጋጀት ረገድ ስላለን ልምድ ያወራል.

ሁሉንም አቅሞቹን ለመግለጽ ግብ አላወጣንም, ነገር ግን ተግባራዊ ችግሮችን በመፍታት ላይ ማተኮር እንፈልጋለን. ይህ የሆነበት ምክንያት በበቂ ሁኔታ ትልቅ መጠን ያለው ሰነድ እና ዝግጁ-የተሰሩ ምስሎች ብዙ ወጥመዶች በመኖራቸው ነው ፣ ቢያንስ እኛ አገኘናቸው።

ቁልልውን በዶክተር አቀናብር በኩል አሰማርተናል። ከዚህም በላይ, እኛ ማለት ይቻላል ምንም ችግር ጋር ቁልል ከፍ ለማድረግ የሚያስችል በደንብ-የተጻፈ docker-compose.yml ነበር. እናም ድሉ ቀድሞ የተቃረበ መስሎናል, አሁን ፍላጎታችንን ለማሟላት ትንሽ እናዞራለን እና ያ ነው.

እንደ አለመታደል ሆኖ ከመተግበሪያችን ምዝግብ ማስታወሻዎችን ለመቀበል እና ለማስኬድ ስርዓቱን ለማስተካከል የተደረገው ሙከራ ገና ከሌሊት ወፍ አልተሳካም። ስለዚህ, እያንዳንዱን አካል በተናጠል ማጥናት ጠቃሚ እንደሆነ ወስነናል, ከዚያም ወደ ግንኙነታቸው ይመለሱ.

ስለዚህ በሎግስታሽ እንጀምር።

አካባቢ, ማሰማራት, Logstash በመያዣ ውስጥ ማስኬድ

ለማሰማራት, docker-compose እንጠቀማለን, እዚህ የተገለጹት ሙከራዎች በ MacOS እና Ubuntu 18.0.4 ላይ ተካሂደዋል.

በእኛ ኦሪጅናል docker-compose.yml ላይ የነበረው የሎግስታሽ ምስል docker.elastic.co/logstash/logstash:6.3.2 ነው

ለሙከራዎች እንጠቀማለን.

ሎግስታሽ ለማሄድ፣ የተለየ docker-compose.yml ጽፈናል። በእርግጥ ምስሉን ከትዕዛዝ መስመሩ ማስጀመር ይቻል ነበር ፣ ግን ከሁሉም በኋላ ፣ ከዶክተር-ኮምፖስ ሁሉም ነገር ለእኛ የሚጀመርበት አንድ የተወሰነ ተግባር ፈታን።

ስለ ውቅር ፋይሎች በአጭሩ

ከማብራሪያው እንደሚከተለው, logstash እንደ አንድ ሰርጥ ሊሰራ ይችላል, በዚህ ሁኔታ, *.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. አንድ አገልግሎት (አገልግሎቶች) logstash ከ 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 ተግባራዊ መተግበሪያ. ሎግስታሽ በማዘጋጀት ላይ

pipeg.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] የፍቃድ መረጃን ከፈቃድ አገልጋይ ሰርስሮ ማውጣት አልተቻለም ::የጥራት ውድቀት]ላስቲክ ፍለጋ”፣...

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,:".ክትትል-ሎግስታሽ"]፣ :non_running_pipelines=>[ ]}
logstash_one_channel | [2019-04-29T11:29:00,015][ERROR][logstash.inputs.metrics] X-Pack በLogstash ላይ ተጭኗል ግን በElasticsearch ላይ አይደለም። እባክዎ የክትትል ባህሪውን ለመጠቀም X-Packን በ Elasticsearch ላይ ይጫኑ። ሌሎች ባህሪያት ሊኖሩ ይችላሉ።
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] [ማስጠንቀቂያ] [logstash.outputs.elasticsearch] ከሞተ ES ምሳሌ ጋር ግንኙነትን ለማስነሳት ሞክሯል፣ነገር ግን ስህተት ተገኘ። {: url=>"እንጦጦ: 9200/", : error_type => LogStash :: ውጤቶች :: የላስቲክ ፍለጋ :: HttpClient :: ፑል :: አስተናጋጅ የማይደረስ ስህተት, :ስህተት => "Elasticsearch የማይደረስበት: [http://elasticsearch:9200/] [ማንቲኮር :: የመፍትሄው ውድቀት] 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][ማስጠንቀቂያ] [logstash.licensechecker.licensereader] ከሞተ የES ምሳሌ ጋር ያለውን ግንኙነት ለማስነሳት ሞክሯል፣ነገር ግን ስህተት አጋጥሞታል። {: url=>"እንጦጦ: 9200/", : error_type => LogStash :: ውጤቶች :: የላስቲክ ፍለጋ :: HttpClient :: ፑል :: አስተናጋጅ የማይደረስ ስህተት, :ስህተት => "Elasticsearch የማይደረስበት: [http://elasticsearch:9200/] [ማንቲኮር :: የመፍትሄው ውድቀት] 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
   }
  }

ከፋይል ውሂብ በማግኘት ላይ

እንዲሁም የፋይል ሁነታን ለመመልከት ወስነናል. ከፋይሉ ጋር በጥሩ ሁኔታ የሚሰራ ከሆነ, ምንም አይነት ወኪል አያስፈልግም, ጥሩ, ቢያንስ ለአካባቢያዊ ጥቅም ሊሆን ይችላል.

እንደ መግለጫው, የአሰራር ዘዴው ከጅራት -f ጋር ተመሳሳይ መሆን አለበት, ማለትም. አዲስ መስመሮችን ያነባል ወይም እንደ አማራጭ ሙሉውን ፋይል ያነባል.

ስለዚህ እኛ ማግኘት የምንፈልገው:

  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 ን እንደገና ያሂዱ እና ይመልከቱ፡-

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 ናቸው፣ ሌሎች ደግሞ ስህተት ናቸው።

በመውጫው ላይ ልንለያቸው ይገባል. እነዚያ። መረጃ ሰጪ መልዕክቶችን በአንድ ቻናል እንጽፋለን፣ በሌላኛው ደግሞ የስህተት መልእክቶችን እንጽፋለን።

ይህንን ለማድረግ, ለማጣራት እና ለማውጣት ከግቤት ክፍል ይሂዱ.

የማጣሪያውን ክፍል በመጠቀም መጪውን መልእክት እንመረምራለን ፣ ከእሱ ሃሽ (ቁልፍ-እሴት ጥንዶች) እናገኛለን ፣ ከእሱ ጋር ቀድሞውኑ መሥራት የምንችልበት ፣ ማለትም ። እንደ ሁኔታዎቹ መተንተን. እና በውጤቱ ክፍል ውስጥ መልእክቶችን እንመርጣለን እና እያንዳንዱን ወደ ራሱ ቻናል እንልካለን።

መልእክትን ከግሩክ ጋር መተንተን

የጽሑፍ ሕብረቁምፊዎችን ለመተንተን እና የመስኮችን ስብስብ ለማግኘት, በማጣሪያ ክፍል ውስጥ ልዩ ፕለጊን አለ - ግሮክ.

እዚህ ላይ ዝርዝር መግለጫ ለመስጠት ራሴን ግብ ሳላስቀምጥ (ለዚህም እጠቅሳለሁ። ኦፊሴላዊ ሰነዶች), ቀላል ምሳሌዬን እሰጣለሁ.

ይህንን ለማድረግ በግቤት መስመሮች ቅርጸት ላይ መወሰን ያስፈልግዎታል. እንደዚህ አሉኝ፡-

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።

በውጤቱ ክፍል ውስጥ ይታያሉ.

በውጤቱ ክፍል ውስጥ መልዕክቶችን ማዘዋወር ከትእዛዝ ጋር

በውጤቱ ክፍል, እንደምናስታውሰው, መልእክቶቹን በሁለት ዥረቶች እንከፍላቸው ነበር. ጥቂቶቹ - ኢንፎ የሆኑ፣ ወደ ኮንሶሉ እናወጣለን፣ እና ከስህተቶች ጋር፣ ወደ ፋይል እንወጣለን።

እነዚህን መልዕክቶች እንዴት ማካፈል እንችላለን? የችግሩ ሁኔታ አስቀድሞ መፍትሄ ይጠቁማል - ከሁሉም በላይ ፣ ቀድሞውኑ የተወሰነ የመልእክት ዓይነት መስክ አለን ፣ ይህም ሁለት እሴቶችን INFO እና ስህተት ብቻ ሊወስድ ይችላል። መግለጫውን ተጠቅመን ምርጫ የምናደርገው በእሱ ላይ ነው።

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

እንጀምራለን, እንሞክራለን, ክፍፍሉን በሁለት ጅረቶች እናያለን.

ምንጭ: hab.com

አስተያየት ያክሉ