Cymhwyso ELK yn ymarferol. Sefydlu logstash

Cyflwyniad

Wrth ddefnyddio system arall, roeddem yn wynebu'r angen i brosesu nifer fawr o wahanol gofnodion. Dewiswyd ELK fel yr offeryn. Bydd yr erthygl hon yn trafod ein profiad o sefydlu'r pentwr hwn.

Nid ydym yn gosod nod i ddisgrifio ei holl alluoedd, ond rydym am ganolbwyntio'n benodol ar ddatrys problemau ymarferol. Mae hyn oherwydd y ffaith, hyd yn oed os oes llawer iawn o ddogfennaeth a delweddau parod, mae yna lawer iawn o beryglon, o leiaf fe ddaethon ni o hyd iddyn nhw.

Fe wnaethom ddefnyddio'r pentwr trwy docker-compose. Ar ben hynny, roedd gennym docker-compose.yml wedi'i ysgrifennu'n dda, a oedd yn caniatΓ‘u inni godi'r pentwr bron heb broblemau. Ac roedd yn ymddangos i ni fod y fuddugoliaeth eisoes yn agos, nawr byddwn yn ei haddasu ychydig i weddu i'n hanghenion a dyna ni.

Yn anffodus, ni fu'r ymgais i ffurfweddu'r system i dderbyn a phrosesu logiau o'n cais yn llwyddiannus ar unwaith. Felly, penderfynasom ei bod yn werth astudio pob cydran ar wahΓ’n, ac yna dychwelyd i'w cysylltiadau.

Felly, dechreuon ni gyda logstash.

Amgylchedd, lleoli, rhedeg Logstash mewn cynhwysydd

Ar gyfer defnydd rydym yn defnyddio docker-compose; cynhaliwyd yr arbrofion a ddisgrifir yma ar MacOS a Ubuntu 18.0.4.

Y ddelwedd logstash a gofrestrwyd yn ein docker-compose.yml gwreiddiol yw docker.elastic.co/logstash/logstash:6.3.2

Byddwn yn ei ddefnyddio ar gyfer arbrofion.

Fe wnaethon ni ysgrifennu docker-compose.yml ar wahΓ’n i redeg logstash. Wrth gwrs, roedd yn bosibl lansio'r ddelwedd o'r llinell orchymyn, ond roeddem yn datrys problem benodol, lle rydym yn rhedeg popeth o docker-compose.

Yn fyr am ffeiliau ffurfweddu

Fel a ganlyn o'r disgrifiad, gellir lansio logstash naill ai ar gyfer un sianel, ac os felly mae angen iddo basio'r ffeil *.conf, neu ar gyfer sawl sianel, ac os felly mae angen iddo basio'r ffeil pipelines.yml, sydd, yn ei dro , Bydd yn cysylltu Γ’'r ffeiliau .conf ar gyfer pob sianel.
Cymerasom yr ail lwybr. Roedd yn ymddangos i ni yn fwy cyffredinol a graddadwy. Felly, fe wnaethom greu pipelines.yml, a gwneud cyfeiriadur piblinellau lle byddwn yn rhoi ffeiliau .conf ar gyfer pob sianel.

Y tu mewn i'r cynhwysydd mae ffeil ffurfweddu arall - logstash.yml. Nid ydym yn ei gyffwrdd, rydym yn ei ddefnyddio fel y mae.

Felly, ein strwythur cyfeiriadur:

Cymhwyso ELK yn ymarferol. Sefydlu logstash

I dderbyn data mewnbwn, am y tro rydym yn cymryd mai tcp yw hwn ar borthladd 5046, ac ar gyfer allbwn byddwn yn defnyddio stdout.

Dyma gyfluniad syml ar gyfer y lansiad cyntaf. Oherwydd mai'r dasg gychwynnol yw lansio.

Felly, mae gennym y docker-compose.yml hwn

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

Beth welwn ni yma?

  1. Cymerwyd rhwydweithiau a chyfeintiau o'r docker-compose.yml gwreiddiol (yr un lle mae'r pentwr cyfan yn cael ei lansio) a chredaf nad ydynt yn effeithio'n fawr ar y darlun cyffredinol yma.
  2. Rydym yn creu un gwasanaeth(au) logstash o'r ddelwedd docker.elastic.co/logstash/logstash:6.3.2 a'i enwi logstash_one_channel.
  3. Rydym yn anfon porthladd 5046 y tu mewn i'r cynhwysydd, i'r un porthladd mewnol.
  4. Rydym yn mapio ein ffeil ffurfweddu pibell ./config/pipelines.yml i'r ffeil /usr/share/logstash/config/pipelines.yml y tu mewn i'r cynhwysydd, lle bydd logstash yn ei godi a'i wneud yn ddarllenadwy yn unig, rhag ofn.
  5. Rydym yn mapio'r cyfeiriadur ./config/pipelines, lle mae gennym ffeiliau gyda gosodiadau sianel, i mewn i'r cyfeiriadur /usr/share/logstash/config/pipelines a hefyd yn ei wneud yn ddarllenadwy yn unig.

Cymhwyso ELK yn ymarferol. Sefydlu logstash

Ffeil Pipelines.yml

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

Disgrifir un sianel gyda'r dynodwr HABR a'r llwybr i'w ffeil ffurfweddu yma.

Ac yn olaf y ffeil β€œ./config/pipelines/habr_pipeline.conf”

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

Peidiwch Γ’ mynd i mewn i'w ddisgrifiad am y tro, gadewch i ni geisio ei redeg:

docker-compose up

Beth ydym ni'n ei weld?

Mae'r cynhwysydd wedi dechrau. Gallwn wirio ei weithrediad:

echo '13123123123123123123123213123213' | nc localhost 5046

Ac rydym yn gweld yr ymateb yn y consol cynhwysydd:

Cymhwyso ELK yn ymarferol. Sefydlu logstash

Ond ar yr un pryd, rydym hefyd yn gweld:

logstash_one_channel | [2019-04-29T11:28:59,790][ERROR][logstash.licensechecker.licensereader] Methu ag adalw gwybodaeth trwydded o weinydd y drwydded {:message=> β€œElasticsearch Unreachable: [http://elasticsearch:9200/][Manticore ::ResolutionFailure] elasticsearch", ...

logstash_one_channel | [2019-04-29T11:28:59,894][INFO ][logstash.pipeline ] Dechreuodd y bibell yn llwyddiannus {:pipeline_id=>".monitoring-logstash", :thread=>" # " }

logstash_one_channel | [2019-04-29T11:28:59,988][INFO ][logstash.agent ] Piblinellau'n rhedeg {:count=>2, :running_pipelines=>[:HABR, :.monitoring-logstash"], :non_running_pipelines=>[ ]}
logstash_one_channel | [2019-04-29T11:29:00,015][ERROR][logstash.inputs.metrics] Mae X-Pack wedi'i osod ar Logstash ond nid ar Elasticsearch. Gosodwch X-Pack ar Elasticsearch i ddefnyddio'r nodwedd monitro. Efallai y bydd nodweddion eraill ar gael.
logstash_one_channel | [2019-04-29T11:29:00,526][INFO ][logstash.agent ] Dechreuwyd pwynt terfyn API Logstash yn llwyddiannus {:port=>9600}
logstash_one_channel | [2019-04-29T11:29:04,478][INFO ][logstash.outputs.elasticsearch] Rhedeg gwiriad iechyd i weld a yw cysylltiad Elasticsearch yn gweithio {:healthcheck_url=>http://elasticsearch:9200/, :path=> "/"}
logstash_one_channel | [2019-04-29T11:29:04,487][WARN ][logstash.outputs.elasticsearch] Wedi ceisio atgyfodi cysylltiad ag enghraifft ES marw, ond cafwyd gwall. {:url=>"elasticsearch:9200/", :error_type=>LogStash::Allbynnau::ElasticSearch::HttpClient::Pool::HostUnreachableError, :error=> "Elasticsearch Unreachable: [http://elasticsearch:9200/][Manticore::ResolutionFailure] chwiliad elastig"}
logstash_one_channel | [2019-04-29T11:29:04,704][INFO][logstash.licensechecker.licensereader] Rhedeg gwiriad iechyd i weld a yw cysylltiad Elasticsearch yn gweithio {:healthcheck_url=>http://elasticsearch:9200/, :path=> "/"}
logstash_one_channel | [2019-04-29T11:29:04,710][WARN] [logstash.licensechecker.licensereader] Wedi ceisio atgyfodi cysylltiad ag enghraifft ES marw, ond cafwyd gwall. {:url=>"elasticsearch:9200/", :error_type=>LogStash::Allbynnau::ElasticSearch::HttpClient::Pool::HostUnreachableError, :error=> "Elasticsearch Unreachable: [http://elasticsearch:9200/][Manticore::ResolutionFailure] chwiliad elastig"}

Ac mae ein log yn cynyddu drwy'r amser.

Yma rwyf wedi amlygu mewn gwyrdd y neges y mae'r biblinell wedi'i lansio'n llwyddiannus, mewn coch y neges gwall ac mewn melyn y neges am ymgais i gysylltu elasticsearch: 9200.
Mae hyn yn digwydd oherwydd bod logstash.conf, sydd wedi'i gynnwys yn y ddelwedd, yn cynnwys siec am argaeledd elasticsearch. Wedi'r cyfan, mae logstash yn tybio ei fod yn gweithio fel rhan o'r pentwr Elk, ond fe wnaethon ni ei wahanu.

Mae'n bosibl gweithio, ond nid yw'n gyfleus.

Yr ateb yw analluogi'r gwiriad hwn trwy'r newidyn amgylchedd XPACK_MONITORING_ENABLED.

Gadewch i ni wneud newid i docker-compose.yml a'i redeg eto:

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

Nawr, mae popeth yn iawn. Mae'r cynhwysydd yn barod ar gyfer arbrofion.

Gallwn deipio eto yn y consol nesaf:

echo '13123123123123123123123213123213' | nc localhost 5046

A gweld:

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

Gweithio o fewn un sianel

Felly fe wnaethom lansio. Nawr gallwch chi gymryd yr amser i ffurfweddu logstash ei hun. Gadewch i ni beidio Γ’ chyffwrdd Γ’'r ffeil pipelines.yml am y tro, gadewch i ni weld beth allwn ni ei gael trwy weithio gydag un sianel.

Rhaid imi ddweud bod yr egwyddor gyffredinol o weithio gyda ffeil ffurfweddu'r sianel wedi'i disgrifio'n dda yn y llawlyfr swyddogol, yma yma
Os ydych chi eisiau darllen yn Rwsieg, fe wnaethon ni ddefnyddio'r un hon erthygl(ond mae cystrawen yr ymholiad yn hen, mae angen inni gymryd hyn i ystyriaeth).

Gadewch i ni fynd yn ddilyniannol o'r adran Mewnbwn. Rydym eisoes wedi gweld gwaith ar TCP. Beth arall allai fod yn ddiddorol yma?

Profi negeseuon gan ddefnyddio curiad calon

Mae cyfle mor ddiddorol i gynhyrchu negeseuon prawf awtomatig.
I wneud hyn, mae angen i chi alluogi'r ategyn ffa calon yn yr adran fewnbwn.

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

Trowch ef ymlaen, dechreuwch dderbyn unwaith y funud

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

Os ydym am dderbyn yn amlach, mae angen inni ychwanegu'r paramedr egwyl.
Dyma sut y byddwn yn derbyn neges bob 10 eiliad.

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

NΓ΄l data o ffeil

Penderfynasom hefyd edrych ar y modd ffeil. Os yw'n gweithio'n iawn gyda'r ffeil, yna efallai nad oes angen asiant, at ddefnydd lleol o leiaf.

Yn Γ΄l y disgrifiad, dylai'r modd gweithredu fod yn debyg i gynffon -f, h.y. yn darllen llinellau newydd neu, fel opsiwn, yn darllen y ffeil gyfan.

Felly beth rydyn ni eisiau ei gael:

  1. Rydym am dderbyn llinellau sydd wedi'u hatodi i un ffeil log.
  2. Rydym am dderbyn data sydd wedi'i ysgrifennu i sawl ffeil log, tra'n gallu gwahanu'r hyn a dderbynnir o ble.
  3. Rydym am wneud yn siΕ΅r pan fydd logstash yn cael ei ailgychwyn, nad yw'n derbyn y data hwn eto.
  4. Rydym am wirio, os caiff logstash ei ddiffodd, a bod data'n parhau i gael ei ysgrifennu i ffeiliau, yna pan fyddwn yn ei redeg, byddwn yn derbyn y data hwn.

I gynnal yr arbrawf, gadewch i ni ychwanegu llinell arall at docker-compose.yml, gan agor y cyfeiriadur yr ydym yn rhoi'r ffeiliau ynddo.

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

A newid yr adran fewnbwn yn habr_pipeline.conf

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

Gadewch i ni ddechrau:

docker-compose up

I greu ac ysgrifennu ffeiliau log byddwn yn defnyddio'r gorchymyn:


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

Ydy, mae'n gweithio!

Ar yr un pryd, gwelwn ein bod wedi ychwanegu maes y llwybr yn awtomatig. Mae hyn yn golygu y byddwn yn gallu hidlo cofnodion erbyn hyn yn y dyfodol.

Gadewch i ni geisio eto:

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

Ac yn awr i ffeil arall:

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

Gwych! Codwyd y ffeil, nodwyd y llwybr yn gywir, mae popeth yn iawn.

Stopiwch logstash a dechrau eto. Gadewch i ni aros. Tawelwch. Y rhai. Nid ydym yn derbyn y cofnodion hyn eto.

Ac yn awr yr arbrawf mwyaf beiddgar.

Gosod logstash a gweithredu:

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

Rhedeg logstash eto a gweld:

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

Hwre! Codwyd popeth.

Ond rhaid i ni eich rhybuddio am y canlynol. Os caiff y cynhwysydd logstash ei ddileu (stop docker logstash_one_channel && docker rm logstash_one_channel), yna ni fydd dim yn cael ei godi. Roedd lleoliad y ffeil y darllenwyd hi hyd at ei storio yn cael ei storio y tu mewn i'r cynhwysydd. Os ydych chi'n ei redeg o'r dechrau, dim ond llinellau newydd y bydd yn eu derbyn.

Darllen ffeiliau presennol

Gadewch i ni ddweud ein bod yn lansio logstash am y tro cyntaf, ond mae gennym ni logiau eisoes a hoffem eu prosesu.
Os byddwn yn rhedeg logstash gyda'r adran fewnbwn a ddefnyddiwyd gennym uchod, ni fyddwn yn cael dim. Dim ond llinellau newydd fydd yn cael eu prosesu gan logstash.

Er mwyn i linellau o ffeiliau presennol gael eu tynnu i fyny, dylech ychwanegu llinell ychwanegol at yr adran fewnbwn:

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

Ar ben hynny, mae yna naws: mae hyn ond yn effeithio ar ffeiliau newydd nad yw logstash wedi'u gweld eto. Ar gyfer yr un ffeiliau a oedd eisoes ym maes gweld logstash, mae eisoes wedi cofio eu maint a nawr bydd yn cymryd cofnodion newydd ynddynt yn unig.

Gadewch i ni stopio yma ac astudio'r adran fewnbwn. Mae yna lawer o opsiynau o hyd, ond mae hynny'n ddigon i ni ar gyfer arbrofion pellach am y tro.

Llwybro a Thrawsnewid Data

Gadewch i ni geisio datrys y broblem ganlynol, gadewch i ni ddweud bod gennym ni negeseuon o un sianel, mae rhai ohonyn nhw'n wybodaeth, ac mae rhai yn negeseuon gwall. Maent yn gwahaniaethu yn Γ΄l tag. Mae rhai yn INFO, mae eraill yn ERROR.

Mae angen inni eu gwahanu wrth yr allanfa. Y rhai. Rydym yn ysgrifennu negeseuon gwybodaeth mewn un sianel, a negeseuon gwall mewn sianel arall.

I wneud hyn, symudwch o'r adran fewnbwn i'r hidlydd ac allbwn.

Gan ddefnyddio'r adran hidlo, byddwn yn dosrannu'r neges sy'n dod i mewn, gan gael hash (parau gwerth allweddol) ohoni, y gallwn weithio gydag ef eisoes, h.y. dadosod yn Γ΄l amodau. Ac yn yr adran allbwn, byddwn yn dewis negeseuon ac yn anfon pob un i'w sianel ei hun.

Dosrannu neges gyda grok

Er mwyn dosrannu llinynnau testun a chael set o feysydd oddi wrthynt, mae ategyn arbennig yn yr adran hidlo - grok.

Heb osod y nod i mi fy hun i roddi desgrifiad manwl o hono yma (am hyn y cyfeiriaf dogfennaeth swyddogol), Rhoddaf fy enghraifft syml.

I wneud hyn, mae angen ichi benderfynu ar fformat y llinynnau mewnbwn. Mae gen i nhw fel hyn:

1 neges INFO1
2 neges GWALL2

Y rhai. Daw'r dynodwr yn gyntaf, yna GWYBODAETH/GWALL, yna rhyw air heb fylchau.
Nid yw'n anodd, ond mae'n ddigon deall yr egwyddor o weithredu.

Felly, yn adran hidlo'r ategyn grok, rhaid inni ddiffinio patrwm ar gyfer dosrannu ein llinynnau.

Bydd yn edrych fel hyn:

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

Yn y bΓ΄n mae'n fynegiant rheolaidd. Defnyddir patrymau parod, megis INT, LOGLEVEL, WORD. Mae eu disgrifiad, yn ogystal Γ’ phatrymau eraill, i'w gweld yma yma

Nawr, wrth fynd trwy'r hidlydd hwn, bydd ein llinyn yn troi'n stwnsh o dri maes: message_id, message_type, message_text.

Byddant yn cael eu harddangos yn yr adran allbwn.

Llwybro negeseuon i'r adran allbwn gan ddefnyddio'r gorchymyn if

Yn yr adran allbwn, fel y cofiwn, roeddem yn mynd i rannu'r negeseuon yn ddwy ffrwd. Bydd rhai - sy'n iNFO, yn cael eu hallbynnu i'r consol, a gyda gwallau, byddwn yn allbynnu i ffeil.

Sut mae gwahanu'r negeseuon hyn? Mae cyflwr y broblem eisoes yn awgrymu ateb - wedi'r cyfan, mae gennym eisoes faes message_type pwrpasol, a all gymryd dau werth yn unig: INFO a ERROR. Ar y sail hon y byddwn yn gwneud dewis gan ddefnyddio'r datganiad if.

if [message_type] == "ERROR" {
        # Π—Π΄Π΅ΡΡŒ Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌ Π² Ρ„Π°ΠΉΠ»
       } else
     {
      # Π—Π΄Π΅ΡΡŒ Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌ Π² stdout
    }

Ceir disgrifiad o weithio gyda meysydd a gweithredwyr yn yr adran hon llawlyfr swyddogol.

Nawr, am y casgliad gwirioneddol ei hun.

Allbwn consol, mae popeth yn glir yma - stdout {}

Ond yr allbwn i ffeil - cofiwch ein bod yn rhedeg hyn i gyd o gynhwysydd ac er mwyn i'r ffeil yr ydym yn ysgrifennu'r canlyniad ynddi fod yn hygyrch o'r tu allan, mae angen i ni agor y cyfeiriadur hwn yn docker-compose.yml.

Cyfanswm:

Mae adran allbwn ein ffeil yn edrych fel hyn:


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

Yn docker-compose.yml rydym yn ychwanegu cyfrol arall ar gyfer allbwn:

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

Rydyn ni'n ei lansio, yn rhoi cynnig arni, ac yn gweld rhaniad yn ddwy ffrwd.

Ffynhonnell: hab.com

Ychwanegu sylw