Praktikal nga paggamit sa ELK. Pag-set up sa logstash

Pasiuna

Samtang nag-deploy ug lain nga sistema, nag-atubang kami sa panginahanglan nga iproseso ang daghang lainlaing mga troso. Ang ELK gipili isip himan. Kini nga artikulo maghisgot sa among kasinatian sa pag-set up niini nga stack.

Wala kami magtakda og tumong nga ihulagway ang tanang kapabilidad niini, apan gusto namo nga magkonsentrar ilabina sa pagsulbad sa praktikal nga mga problema. Kini tungod sa kamatuoran nga bisan kung adunay medyo kadaghan nga dokumentasyon ug andam nga mga imahe, adunay daghang mga lit-ag, labing menos nakit-an namon kini.

Gi-deploy namo ang stack pinaagi sa docker-compose. Dugang pa, kami adunay usa ka maayo nga pagkasulat nga docker-compose.yml, nga nagtugot kanamo sa pagpataas sa stack nga halos walay mga problema. Ug ingon sa amon nga hapit na ang kadaugan, karon usbon namon kini gamay aron mohaum sa among mga panginahanglanon ug mao na.

Ikasubo, ang pagsulay sa pag-configure sa sistema sa pagdawat ug pagproseso sa mga log gikan sa among aplikasyon wala dayon malampuson. Busa, nakahukom kami nga angayan nga tun-an ang matag bahin nga gilain, ug unya mobalik sa ilang mga koneksyon.

Busa, nagsugod kami sa logstash.

Kalibutan, pag-deploy, pagpadagan sa Logstash sa usa ka sudlanan

Alang sa deployment gigamit namo ang docker-compose; ang mga eksperimento nga gihulagway dinhi gihimo sa MacOS ug Ubuntu 18.0.4.

Ang imahe sa logstash nga narehistro sa among orihinal nga docker-compose.yml mao ang docker.elastic.co/logstash/logstash:6.3.2

Atong gamiton kini alang sa mga eksperimento.

Nagsulat kami usa ka bulag nga docker-compose.yml aron makadagan ang logstash. Siyempre, posible nga ilunsad ang imahe gikan sa command line, apan among gisulbad ang usa ka piho nga problema, diin among gipadagan ang tanan gikan sa docker-compose.

Sa mubo bahin sa mga file sa pag-configure

Ingon sa mosunod gikan sa paghulagway, ang logstash mahimong modagan bisan alang sa usa ka channel, diin kini kinahanglan nga ipasa ang *.conf file, o alang sa daghang mga channel, diin kini kinahanglan nga ipasa ang pipelines.yml file, nga, sa baylo , mag-link sa mga file .conf para sa matag channel.
Gikuha namo ang ikaduhang dalan. Para namo mas unibersal ug scalable. Busa, naghimo kami og pipelines.yml, ug naghimo og direktoryo sa pipelines diin among ibutang ang .conf nga mga file alang sa matag channel.

Sa sulod sa sudlanan adunay laing configuration file - logstash.yml. Dili namo kini hilabtan, gigamit namo kini sa unsa nga paagi.

Busa, ang among istruktura sa direktoryo:

Praktikal nga paggamit sa ELK. Pag-set up sa logstash

Aron makadawat sa input data, sa pagkakaron atong hunahunaon nga kini ang tcp sa port 5046, ug alang sa output atong gamiton ang stdout.

Ania ang usa ka yano nga pag-configure alang sa una nga paglansad. Tungod kay ang una nga buluhaton mao ang paglansad.

Busa, aduna kita niini nga 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

Unsay atong makita dinhi?

  1. Ang mga network ug mga volume gikuha gikan sa orihinal nga docker-compose.yml (ang usa diin gilunsad ang tibuok stack) ug sa akong hunahuna dili kini makaapekto sa kinatibuk-ang hulagway dinhi.
  2. Naghimo kami og usa ka (mga) serbisyo sa logstash gikan sa docker.elastic.co/logstash/logstash:6.3.2 nga hulagway ug nganlan kini og logstash_one_channel.
  3. Gipasa namo ang port 5046 sulod sa sudlanan, ngadto sa samang internal nga pantalan.
  4. Among mapa sa among pipe configuration file ./config/pipelines.yml ngadto sa file /usr/share/logstash/config/pipelines.yml sulod sa sudlanan, diin kuhaon kini sa logstash ug himoong read-only, kung sakali.
  5. Among gimapa ang ./config/pipelines nga direktoryo, diin naa mi mga file nga adunay mga setting sa channel, ngadto sa /usr/share/logstash/config/pipelines nga direktoryo ug himoon usab kini nga read-only.

Praktikal nga paggamit sa ELK. Pag-set up sa logstash

Pipelines.yml file

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

Usa ka channel nga adunay HABR identifier ug ang agianan sa configuration file niini gihulagway dinhi.

Ug sa katapusan ang file "./config/pipelines/habr_pipeline.conf"

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

Dili na nato hisgotan ang paghulagway niini sa pagkakaron, atong sulayan sa pagpadagan kini:

docker-compose up

Unsay atong makita?

Nagsugod na ang sudlanan. Atong masusi ang operasyon niini:

echo '13123123123123123123123213123213' | nc localhost 5046

Ug atong makita ang tubag sa container console:

Praktikal nga paggamit sa ELK. Pag-set up sa logstash

Apan sa samang higayon, atong makita usab:

logstash_one_channel | [2019-04-29T11:28:59,790][ERROR][logstash.licensechecker.licensereader] Dili makuha ang impormasyon sa lisensya gikan sa server sa lisensya {:message=>β€œElasticsearch Dili Maabot: [http://elasticsearch:9200/][Manticore ::ResolutionFailure] elasticsearch", ...

logstash_one_channel | [2019-04-29T11:28:59,894][INFO ][logstash.pipeline ] Malampuson nga nagsugod ang pipeline {:pipeline_id=>".monitoring-logstash", :thread=>"# "}

logstash_one_channel | [2019-04-29T11:28:59,988][INFO ][logstash.agent ] Pipelines nga nagdagan {:count=>2, :running_pipelines=>[:HABR, :".monitoring-logstash"], :non_running_pipelines=>[ ]}
logstash_one_channel | [2019-04-29T11:29:00,015][ERROR][logstash.inputs.metrics] Gi-install ang X-Pack sa Logstash pero dili sa Elasticsearch. Palihug i-install ang X-Pack sa Elasticsearch aron magamit ang bahin sa pag-monitor. Ang ubang mga bahin mahimong magamit.
logstash_one_channel | [2019-04-29T11:29:00,526][INFO ][logstash.agent ] Malampusong gisugdan ang Logstash API endpoint {:port=>9600}
logstash_one_channel | [2019-04-29T11:29:04,478][INFO ][logstash.outputs.elasticsearch] Nagdagan nga pagsusi sa kahimsog aron mahibal-an kung ang usa ka koneksyon sa Elasticsearch nagtrabaho {:healthcheck_url=>http://elasticsearch:9200/,:path=> "/"}
logstash_one_channel | [2019-04-29T11:29:04,487][WARN][logstash.outputs.elasticsearch] Misulay sa pagbanhaw sa koneksyon sa patay nga ES nga pananglitan, apan nasayop. {:url=>β€œpagkamaunat-unat:9200/", :error_type=>LogStash::Mga Output::ElasticSearch::HttpClient::Pool::HostUnreachableError, :error=>"Elasticsearch Dili Maabot: [http://elasticsearch:9200/][Manticore::ResolutionFailure] elasticsearch"}
logstash_one_channel | [2019-04-29T11:29:04,704][INFO ][logstash.licensechecker.licensereader] Nagdagan nga pagsusi sa kahimsog aron mahibal-an kung ang usa ka koneksyon sa Elasticsearch nagtrabaho {:healthcheck_url=>http://elasticsearch:9200/,:path=> "/"}
logstash_one_channel | [2019-04-29T11:29:04,710][WARN][logstash.licensechecker.licensereader] Misulay sa pagbanhaw sa koneksyon sa patay nga ES nga pananglitan, apan nasayop. {:url=>β€œpagkamaunat-unat:9200/", :error_type=>LogStash::Mga Output::ElasticSearch::HttpClient::Pool::HostUnreachableError, :error=>"Elasticsearch Dili Maabot: [http://elasticsearch:9200/][Manticore::ResolutionFailure] elasticsearch"}

Ug ang among troso nagkamang sa tanang panahon.

Dinhi akong gipasiugda sa berde ang mensahe nga malampuson nga gilunsad ang pipeline, pula ang mensahe sa sayup ug sa dilaw ang mensahe bahin sa pagsulay sa pagkontak pagkamaunat-unat: 9200.
Nahitabo kini tungod kay ang logstash.conf, nga gilakip sa imahe, adunay usa ka tseke alang sa pagkaanaa sa elasticsearch. Human sa tanan, ang logstash nagtuo nga kini nagtrabaho isip bahin sa Elk stack, apan gibulag namo kini.

Posible nga magtrabaho, apan dili kini kombenyente.

Ang solusyon mao ang pag-disable niini nga tseke pinaagi sa XPACK_MONITORING_ENABLED environment variable.

Maghimo kita usa ka pagbag-o sa docker-compose.yml ug padaganon kini pag-usab:

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

Karon, maayo na ang tanan. Ang sudlanan andam na alang sa mga eksperimento.

Maka-type na usab kami sa sunod nga console:

echo '13123123123123123123123213123213' | nc localhost 5046

Ug tan-awa:

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

Pagtrabaho sulod sa usa ka channel

So naglansad mi. Karon mahimo ka nga mogahin og panahon sa pag-configure sa logstash mismo. Dili nato hikapa ang pipelines.yml file sa pagkakaron, tan-awon nato kung unsa ang atong makuha pinaagi sa pagtrabaho sa usa ka channel.

Kinahanglan kong isulti nga ang kinatibuk-ang prinsipyo sa pagtrabaho kauban ang file sa pagsumpo sa channel maayo nga gihulagway sa opisyal nga manwal, dinhi dinhi
Kung gusto nimo magbasa sa Russian, gigamit namon kini artikulo(apan daan na ang query syntax didto, kinahanglan natong tagdon kini).

Magsunod-sunod kita gikan sa seksyon sa Input. Nakita na namo ang trabaho sa TCP. Unsa pa ang mahimong makapaikag dinhi?

Sulayi ang mga mensahe gamit ang pinitik sa kasingkasing

Adunay ingon nga usa ka makapaikag nga oportunidad sa pagmugna awtomatikong mga mensahe sa pagsulay.
Aron mahimo kini, kinahanglan nimo nga i-enable ang heartbean plugin sa input section.

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

I-on kini, sugdi ang pagdawat kausa sa usa ka minuto

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

Kung gusto namon nga makadawat kanunay, kinahanglan namon nga idugang ang parameter sa interval.
Ingon niini ang paagi nga makadawat kami usa ka mensahe matag 10 segundos.

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

Pagkuha sa datos gikan sa usa ka file

Nakahukom usab kami nga tan-awon ang file mode. Kung maayo ang pagtrabaho sa file, nan tingali wala’y ahente nga gikinahanglan, labing menos alang sa lokal nga paggamit.

Sumala sa paghulagway, ang operating mode kinahanglan nga susama sa ikog -f, i.e. nagbasa sa bag-ong mga linya o, ingon usa ka kapilian, nagbasa sa tibuuk nga file.

Mao nga kung unsa ang gusto namon makuha:

  1. Gusto namon nga makadawat mga linya nga gidugang sa usa ka log file.
  2. Gusto namon nga makadawat mga datos nga gisulat sa daghang mga file sa log, samtang makahimo sa pagbulag kung unsa ang nadawat kung diin.
  3. Gusto namon nga masiguro nga kung gi-restart ang logstash, dili na kini makadawat pag-usab sa kini nga datos.
  4. Gusto namon nga susihon nga kung ang logstash gipalong, ug ang data nagpadayon sa pagsulat sa mga file, unya kung among gipadagan kini, among madawat kini nga datos.

Aron mapahigayon ang eksperimento, magdugang ta og laing linya sa docker-compose.yml, magbukas sa direktoryo diin atong ibutang ang mga file.

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

Ug usba ang seksyon sa input sa habr_pipeline.conf

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

Magsugod ta:

docker-compose up

Sa paghimo ug pagsulat sa mga file sa log atong gamiton ang sugo:


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

Oo, kini molihok!

Sa parehas nga oras, nakita namon nga awtomatiko namon nga gidugang ang uma sa agianan. Kini nagpasabot nga sa umaabot, kita makahimo sa pagsala sa mga rekord pinaagi niini.

Atong sulayan pag-usab:

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

Ug karon sa laing file:

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

Nindot! Ang file gikuha, ang agianan gitino sa husto, ang tanan maayo.

Hunonga ang logstash ug sugdi pag-usab. Maghulat ta. Kahilom. Mga. Dili na namo madawat kini nga mga rekord pag-usab.

Ug karon ang labing maisugon nga eksperimento.

I-install ang logstash ug ipatuman:

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

Dagan pag-usab ang logstash ug tan-awa:

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

Hooray! Gikuha ang tanan.

Apan kinahanglan namong pasidan-an ka bahin sa mosunod. Kung ang sudlanan nga adunay logstash matangtang (docker stop logstash_one_channel && docker rm logstash_one_channel), unya walay makuha. Ang posisyon sa file diin kini gibasa gitipigan sulod sa sudlanan. Kung gipadagan nimo kini gikan sa wala, makadawat ra kini nga mga bag-ong linya.

Pagbasa sa kasamtangan nga mga file

Ingnon ta nga naglunsad kami og logstash sa unang higayon, apan aduna na kami mga troso ug gusto namong iproseso kini.
Kung nagpadagan kami sa logstash gamit ang seksyon sa input nga among gigamit sa ibabaw, wala kami makuha. Bag-ong mga linya ra ang iproseso sa logstash.

Aron makuha ang mga linya gikan sa kasamtangan nga mga file, kinahanglan nimong idugang ang dugang nga linya sa seksyon sa input:

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

Dugang pa, adunay usa ka nuance: kini makaapekto lamang sa mga bag-ong file nga wala pa makita sa logstash. Alang sa parehas nga mga file nga naa na sa natad sa pagtan-aw sa logstash, nahinumduman na niini ang ilang gidak-on ug karon magkuha na lang mga bag-ong entry sa kanila.

Mohunong kita dinhi ug tun-an ang seksyon sa input. Adunay daghan pa nga mga kapilian, apan kana igo na alang kanamo alang sa dugang nga mga eksperimento sa pagkakaron.

Routing ug Data Transformation

Atong sulayan nga sulbaron ang mosunod nga problema, ingnon ta nga naa tay mga mensahe gikan sa usa ka channel, ang uban niini kay impormasyon, ug ang uban mga mensahe sa sayop. Nagkalainlain sila sa tag. Ang uban INFO, ang uban ERROR.

Kinahanglan natong ibulag sila sa exit. Mga. Gisulat namo ang mga mensahe sa impormasyon sa usa ka channel, ug ang mga mensahe sa sayop sa lain.

Aron mahimo kini, balhin gikan sa seksyon sa input ngadto sa pagsala ug output.

Gamit ang seksyon sa pagsala, among i-parse ang umaabot nga mensahe, pagkuha usa ka hash (mga pares nga kantidad sa yawe) gikan niini, nga mahimo na namon nga magamit, i.e. disassemble sumala sa mga kondisyon. Ug sa seksyon sa output, magpili kami mga mensahe ug ipadala ang matag usa sa kaugalingon nga channel.

Pag-parse sa usa ka mensahe nga adunay grok

Aron ma-parse ang mga string sa teksto ug makakuha usa ka hugpong sa mga uma gikan kanila, adunay usa ka espesyal nga plugin sa seksyon sa filter - grok.

Sa walay pagbutang sa akong kaugalingon sa tumong sa paghatag sa usa ka detalyado nga paghulagway niini dinhi (alang niini ako nagtumong sa opisyal nga dokumentasyon), akong ihatag ang akong simple nga ehemplo.

Aron mahimo kini, kinahanglan nimo nga magdesisyon sa format sa mga string sa input. Naa koy ingon ani nila:

1 mensahe sa INFO1
2 ERROR nga mensahe2

Mga. Ang identifier nag-una, dayon INFO/ERROR, unya pipila ka pulong nga walay mga luna.
Dili kini lisud, apan igo na nga masabtan ang prinsipyo sa operasyon.

Mao nga, sa seksyon sa filter sa grok plugin, kinahanglan naton ipasabut ang usa ka sumbanan alang sa pag-parse sa atong mga kuwerdas.

Kini tan-awon sama niini:

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

Sa tinuud kini usa ka regular nga ekspresyon. Ang mga andam nga mga sumbanan gigamit, sama sa INT, LOGLEVEL, WORD. Ang ilang paghulagway, ingon man ang uban nga mga sumbanan, makita dinhi dinhi

Karon, sa pag-agi niini nga filter, ang among string mahimong hash sa tulo ka field: message_id, message_type, message_text.

Sila ipakita sa output nga seksyon.

Pag-routing sa mga mensahe ngadto sa output section gamit ang if command

Sa seksyon sa output, ingon sa among nahinumduman, among bahinon ang mga mensahe sa duha ka sapa. Ang uban - nga mao ang iNFO, mahimong output sa console, ug sa mga sayup, magpagawas kami sa usa ka file.

Giunsa nato pagbulag kini nga mga mensahe? Ang kahimtang sa problema nagsugyot na og solusyon - human sa tanan, aduna na kitay dedikado nga message_type nga field, nga mahimo lamang duha ka kantidad: INFO ug ERROR. Kini mao ang sa niini nga basehan nga kita sa paghimo sa usa ka pagpili sa paggamit sa kon pahayag.

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

Ang usa ka paghulagway sa pagtrabaho kauban ang mga uma ug mga operator makit-an sa kini nga seksyon opisyal nga manwal.

Karon, mahitungod sa aktuwal nga konklusyon mismo.

Output sa console, klaro ang tanan dinhi - stdout {}

Apan ang output sa usa ka file - hinumdomi nga gipadagan namo kining tanan gikan sa usa ka sudlanan ug aron ang file diin among gisulat ang resulta mahimong ma-access gikan sa gawas, kinahanglan namon nga ablihan kini nga direktoryo sa docker-compose.yml.

Total:

Ang output nga seksyon sa among file ingon niini:


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

Sa docker-compose.yml nagdugang kami og laing volume alang sa output:

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

Among gilusad kini, gisulayan, ug nakita ang usa ka dibisyon sa duha ka sapa.

Source: www.habr.com

Idugang sa usa ka comment