Ievads
Izvietojot citu sistÄmu, mÄs saskÄrÄmies ar nepiecieÅ”amÄ«bu apstrÄdÄt lielu skaitu dažÄdu žurnÄlu. KÄ rÄ«ks tika izvÄlÄts ELK. Å ajÄ rakstÄ tiks apspriesta mÅ«su pieredze Ŕīs kaudzes iestatÄ«Å”anÄ.
MÄs neizvirzÄm mÄrÄ·i aprakstÄ«t visas tÄ iespÄjas, bet vÄlamies koncentrÄties tieÅ”i uz praktisku problÄmu risinÄÅ”anu. Tas ir saistÄ«ts ar to, ka, lai arÄ« ir diezgan daudz dokumentÄcijas un gatavu attÄlu, ir diezgan daudz slazdu, vismaz mÄs tÄs atradÄm.
MÄs izvietojÄm steku, izmantojot docker-compose. TurklÄt mums bija labi uzrakstÄ«ts docker-compose.yml, kas ļÄva mums gandrÄ«z bez problÄmÄm palielinÄt steku. Un mums Ŕķita, ka uzvara jau ir tuvu, tagad mÄs to nedaudz pielabosim, lai tÄ atbilstu savÄm vajadzÄ«bÄm, un viss.
DiemžÄl mÄÄ£inÄjums konfigurÄt sistÄmu, lai saÅemtu un apstrÄdÄtu žurnÄlus no mÅ«su lietojumprogrammas, uzreiz nebija veiksmÄ«gs. TÄpÄc mÄs nolÄmÄm, ka ir vÄrts izpÄtÄ«t katru komponentu atseviŔķi un pÄc tam atgriezties pie to savienojumiem.
TÄtad, mÄs sÄkÄm ar logstash.
Vide, izvietoÅ”ana, Logstash palaiÅ”ana konteinerÄ
IzvietoÅ”anai mÄs izmantojam docker-compose; Å”eit aprakstÄ«tie eksperimenti tika veikti operÄtÄjsistÄmÄs MacOS un Ubuntu 18.0.4.
Logstash attÄls, kas tika reÄ£istrÄts mÅ«su sÄkotnÄjÄ docker-compose.yml, ir docker.elastic.co/logstash/logstash:6.3.2
MÄs to izmantosim eksperimentiem.
MÄs uzrakstÄ«jÄm atseviŔķu docker-compose.yml, lai palaistu logstash. Protams, attÄlu bija iespÄjams palaist no komandrindas, bet mÄs risinÄjÄm konkrÄtu problÄmu, kur mÄs palaižam visu no docker-compose.
ÄŖsi par konfigurÄcijas failiem
KÄ izriet no apraksta, logstash var palaist vai nu vienam kanÄlam, tÄdÄ gadÄ«jumÄ tam ir jÄnodod *.conf fails, vai vairÄkiem kanÄliem, tÄdÄ gadÄ«jumÄ tam ir jÄnodod pipelines.yml fails, kas, savukÄrt, , izveidos saiti uz failiem .conf katram kanÄlam.
MÄs izvÄlÄjÄmies otro ceļu. Tas mums Ŕķita universÄlÄks un mÄrogojamÄks. TÄpÄc mÄs izveidojÄm pipelines.yml un izveidojÄm pipelines direktoriju, kurÄ katram kanÄlam ievietosim .conf failus.
Konteinera iekÅ”pusÄ ir vÄl viens konfigurÄcijas fails - logstash.yml. MÄs to neaiztiekam, lietojam to tÄdu, kÄds ir.
TÄtad, mÅ«su direktoriju struktÅ«ra:
Lai saÅemtu ievades datus, paÅ”laik mÄs pieÅemam, ka tas ir tcp portÄ 5046, un izvadei izmantosim stdout.
Å eit ir vienkÄrÅ”a konfigurÄcija pirmajai palaiÅ”anai. Jo sÄkotnÄjais uzdevums ir palaist.
TÄtad, mums ir 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
Ko mÄs Å”eit redzam?
- TÄ«kli un sÄjumi tika Åemti no oriÄ£inÄlÄ docker-compose.yml (tÄ, kurÄ tiek palaists viss steks), un es domÄju, ka tie Å”eit Ä«paÅ”i neietekmÄ kopÄjo attÄlu.
- MÄs izveidojam vienu(-s) logstash pakalpojumu(s) no docker.elastic.co/logstash/logstash:6.3.2 attÄla un nosaucam to logstash_one_channel.
- MÄs pÄrsÅ«tÄm portu 5046 konteinera iekÅ”pusÄ uz to paÅ”u iekÅ”Äjo portu.
- MÄs kartÄjam mÅ«su caurules konfigurÄcijas failu ./config/pipelines.yml ar failu /usr/share/logstash/config/pipelines.yml konteinerÄ, kur logstash to paÅems un katram gadÄ«jumam padarÄ«s tikai lasÄmu.
- MÄs kartÄjam direktoriju ./config/pipelines, kurÄ mums ir faili ar kanÄla iestatÄ«jumiem, direktorijÄ /usr/share/logstash/config/pipelines, kÄ arÄ« padarÄm to tikai lasÄmu.
Pipelines.yml fails
- pipeline.id: HABR
pipeline.workers: 1
pipeline.batch.size: 1
path.config: "./config/pipelines/habr_pipeline.conf"
Å eit ir aprakstÄ«ts viens kanÄls ar HABR identifikatoru un ceļŔ uz tÄ konfigurÄcijas failu.
Un visbeidzot fails ā./config/pipelines/habr_pipeline.confā
input {
tcp {
port => "5046"
}
}
filter {
mutate {
add_field => [ "habra_field", "Hello Habr" ]
}
}
output {
stdout {
}
}
PagaidÄm neiedziļinÄsimies tÄ aprakstÄ, mÄÄ£inÄsim to palaist:
docker-compose up
Ko mÄs redzam?
Konteiners ir sÄcies. MÄs varam pÄrbaudÄ«t tÄ darbÄ«bu:
echo '13123123123123123123123213123213' | nc localhost 5046
Un mÄs redzam atbildi konteinera konsolÄ:
Bet tajÄ paÅ”Ä laikÄ mÄs redzam arÄ«:
logstash_one_channel | [2019-04-29T11:28:59,790][KÄ»ÅŖDA][logstash.licensechecker.licensereader] Nevar izgÅ«t licences informÄciju no licences servera {:message=>āElasticsearch nav sasniedzams: [http://elasticsearch:9200/][Manticore ::ResolutionFailure] elasticsearch", ...
logstash_one_channel | [2019-04-29T11:28:59,894][INFO ][logstash.pipeline ] Cauruļvads veiksmÄ«gi sÄkts {:pipeline_id=>".monitoring-logstash", :thread=>"# "}
logstash_one_channel | [2019-04-29T11:28:59,988][INFO ][logstash.agent ] Cauruļvadi darbojas {:count=>2, :running_pipelines=>[:HABR, :".monitoring-logstash"], :non_running_pipelines=>[ ]}
logstash_one_channel | [2019-04-29T11:29:00,015][KÄ»ÅŖDA][logstash.inputs.metrics] X-Pack ir instalÄts Logstash, bet ne Elasticsearch. Lai izmantotu uzraudzÄ«bas funkciju, lÅ«dzu, instalÄjiet X-Pack vietnÄ Elasticsearch. Var bÅ«t pieejamas arÄ« citas funkcijas.
logstash_one_channel | [2019-04-29T11:29:00,526][INFO ][logstash.agent ] VeiksmÄ«gi startÄts Logstash API galapunkts {:port=>9600}
logstash_one_channel | [2019-04-29T11:29:04,478][INFO ][logstash.outputs.elasticsearch] Tiek veikta veselÄ«bas pÄrbaude, lai noskaidrotu, vai Elasticsearch savienojums darbojas {:healthcheck_url=>http://elasticsearch:9200/, :path=> "/"}
logstash_one_channel | [2019-04-29T11:29:04,487][BRÄŖDINÄJUMS ][logstash.outputs.elasticsearch] MÄÄ£inÄja atjaunot savienojumu ar miruÅ”o ES gadÄ«jumu, taÄu radÄs kļūda. {:url=>"
logstash_one_channel | [2019-04-29T11:29:04,704][INFORMÄCIJA ][logstash.licensechecker.licensereader] Tiek veikta veselÄ«bas pÄrbaude, lai noskaidrotu, vai Elasticsearch savienojums darbojas {:healthcheck_url=>http://elasticsearch:9200/, :path=> "/"}
logstash_one_channel | [2019-04-29T11:29:04,710][BRÄŖDINÄJUMS ][logstash.licensechecker.licensereader] MÄÄ£inÄja atjaunot savienojumu ar miruÅ”o ES instanci, taÄu radÄs kļūda. {:url=>"
Un mÅ«su baļķis visu laiku ložÅÄ.
Å eit es zaÄ¼Ä krÄsÄ esmu iezÄ«mÄjis ziÅojumu, ka cauruļvads ir veiksmÄ«gi palaists, sarkanÄ krÄsÄ kļūdas ziÅojumu un dzeltenÄ ziÅojumu par mÄÄ£inÄjumu sazinÄties
Tas notiek tÄpÄc, ka logstash.conf, kas iekļauts attÄlÄ, satur elasticsearch pieejamÄ«bas pÄrbaudi. Galu galÄ logstash pieÅem, ka tas darbojas kÄ daļa no Elk kaudzes, bet mÄs to atdalÄ«jÄm.
Var strÄdÄt, bet tas nav Ärti.
RisinÄjums ir atspÄjot Å”o pÄrbaudi, izmantojot XPACK_MONITORING_ENABLED vides mainÄ«go.
Veiksim izmaiÅas failÄ docker-compose.yml un palaidÄ«sim to vÄlreiz:
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
Tagad viss ir kÄrtÄ«bÄ. Konteiners ir gatavs eksperimentiem.
MÄs varam rakstÄ«t vÄlreiz nÄkamajÄ konsolÄ:
echo '13123123123123123123123213123213' | nc localhost 5046
Un redzi:
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 | }
Darbs viena kanÄla ietvaros
TÄtad mÄs uzsÄkÄm. Tagad jÅ«s faktiski varat veltÄ«t laiku paÅ”a logstash konfigurÄÅ”anai. PagaidÄm neaiztiksim failu pipelines.yml, paskatÄ«simies, ko varam iegÅ«t, strÄdÄjot ar vienu kanÄlu.
Man jÄsaka, ka vispÄrÄjais princips darbam ar kanÄla konfigurÄcijas failu ir labi aprakstÄ«ts oficiÄlajÄ rokasgrÄmatÄ Å”eit
Ja vÄlaties lasÄ«t krievu valodÄ, mÄs izmantojÄm Å”o
PÄrejam secÄ«gi no sadaļas Ievade. MÄs jau esam redzÄjuÅ”i darbu pie TCP. Kas vÄl Å”eit varÄtu bÅ«t interesants?
PÄrbaudiet ziÅojumus, izmantojot sirdsdarbÄ«bu
Ir tik interesanta iespÄja Ä£enerÄt automÄtiskus testa ziÅojumus.
Lai to izdarÄ«tu, ievades sadaÄ¼Ä ir jÄiespÄjo sirdsdarbÄ«bas spraudnis.
input {
heartbeat {
message => "HeartBeat!"
}
}
IeslÄdziet, sÄciet saÅemt reizi minÅ«tÄ
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 | }
Ja vÄlamies saÅemt biežÄk, jÄpievieno intervÄla parametrs.
TÄdÄ veidÄ mÄs saÅemsim ziÅojumu ik pÄc 10 sekundÄm.
input {
heartbeat {
message => "HeartBeat!"
interval => 10
}
}
Datu izgūŔana no faila
MÄs arÄ« nolÄmÄm apskatÄ«t failu režīmu. Ja tas darbojas labi ar failu, iespÄjams, nav nepiecieÅ”ams aÄ£ents, vismaz vietÄjai lietoÅ”anai.
SaskaÅÄ ar aprakstu darbÄ«bas režīmam jÄbÅ«t lÄ«dzÄ«gam astes -f, t.i. nolasa jaunas rindas vai pÄc izvÄles nolasa visu failu.
TÄtad, ko mÄs vÄlamies iegÅ«t:
- MÄs vÄlamies saÅemt rindas, kas ir pievienotas vienam žurnÄlfailam.
- MÄs vÄlamies saÅemt datus, kas ierakstÄ«ti vairÄkos žurnÄlfailos, vienlaikus spÄjot nodalÄ«t saÅemto no kurienes.
- MÄs vÄlamies pÄrliecinÄties, ka pÄc logstash restartÄÅ”anas tas vairs nesaÅem Å”os datus.
- MÄs vÄlamies pÄrbaudÄ«t, vai, ja logstash ir izslÄgts un dati turpinÄs rakstÄ«t failos, tad, kad mÄs to palaižam, mÄs saÅemsim Å”os datus.
Lai veiktu eksperimentu, docker-compose.yml pievienosim vÄl vienu rindiÅu, atverot direktoriju, kurÄ ievietojam failus.
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
Un mainiet ievades sadaļu habr_pipeline.conf
input {
file {
path => "/usr/share/logstash/input/*.log"
}
}
SÄksim:
docker-compose up
Lai izveidotu un rakstÄ«tu žurnÄlfailus, mÄs izmantosim komandu:
āØ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 | }
JÄ, tas darbojas!
TajÄ paÅ”Ä laikÄ mÄs redzam, ka esam automÄtiski pievienojuÅ”i ceļa lauku. Tas nozÄ«mÄ, ka nÄkotnÄ mÄs varÄsim filtrÄt ierakstus pÄc tÄ.
PamÄÄ£inÄsim vÄlreiz:
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 | }
Un tagad pie cita faila:
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 | }
Lieliski! Fails paÅemts, ceļŔ norÄdÄ«ts pareizi, viss kÄrtÄ«bÄ.
Apturiet logstash un sÄciet no jauna. PagaidÄ«sim. Klusums. Tie. MÄs vairs nesaÅemam Å”os ierakstus.
Un tagad visdrosmÄ«gÄkais eksperiments.
InstalÄjiet logstash un izpildiet:
echo '3' >> logs/number2.log
echo '4' >> logs/number1.log
Palaidiet logstash vÄlreiz un skatiet:
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 | }
UrrÄ! Viss tika savÄkts.
Bet mums ir jÄbrÄ«dina par sekojoÅ”o. Ja logstash konteiners tiek dzÄsts (docker stop logstash_one_channel && docker rm logstash_one_channel), nekas netiks noÅemts. Faila pozÄ«cija, lÄ«dz kurai tas tika nolasÄ«ts, tika saglabÄta konteinerÄ. Ja palaižat to no nulles, tas pieÅems tikai jaunas rindas.
EsoŔo failu lasīŔana
PieÅemsim, ka mÄs pirmo reizi palaižam logstash, bet mums jau ir žurnÄli, un mÄs vÄlÄtos tos apstrÄdÄt.
Ja palaižam logstash ar iepriekÅ” izmantoto ievades sadaļu, mÄs neko neiegÅ«sim. Logstash apstrÄdÄs tikai jaunas rindas.
Lai rindas no esoÅ”ajiem failiem tiktu izvilktas, ievades sadaļai jÄpievieno papildu rinda:
input {
file {
start_position => "beginning"
path => "/usr/share/logstash/input/*.log"
}
}
TurklÄt ir nianse: tas ietekmÄ tikai jaunus failus, kurus logstash vÄl nav redzÄjis. Tiem paÅ”iem failiem, kas jau bija logstash skata laukÄ, tas jau ir atcerÄjies to lielumu un tagad tajos uzÅems tikai jaunus ierakstus.
ApstÄsimies Å”eit un izpÄtÄ«sim ievades sadaļu. JoprojÄm ir daudz iespÄju, taÄu ar to mums pagaidÄm pietiek turpmÄkiem eksperimentiem.
MarÅ”rutÄÅ”ana un datu transformÄcija
MÄÄ£inÄsim atrisinÄt Å”Ädu problÄmu, pieÅemsim, ka mums ir ziÅojumi no viena kanÄla, daži no tiem ir informatÄ«vi, bet daži ir kļūdu ziÅojumi. Tie atŔķiras pÄc etiÄ·etes. Daži ir INFO, citi ir KÄ»ÅŖDA.
Mums tie ir jÄatdala pie izejas. Tie. VienÄ kanÄlÄ rakstÄm informatÄ«vos ziÅojumus, citÄ ā kļūdu ziÅojumus.
Lai to izdarÄ«tu, pÄrejiet no ievades sadaļas uz filtru un izvadi.
Izmantojot filtru sadaļu, mÄs parsÄsim ienÄkoÅ”o ziÅojumu, iegÅ«stot no tÄ hash (atslÄgas vÄrtÄ«bu pÄrus), ar kuru jau varam strÄdÄt, t.i. izjaukt atbilstoÅ”i nosacÄ«jumiem. Un izvades sadaÄ¼Ä mÄs atlasÄ«sim ziÅojumus un nosÅ«tÄ«sim katru uz savu kanÄlu.
ZiÅas parsÄÅ”ana ar groku
Lai parsÄtu teksta virknes un no tÄm iegÅ«tu lauku kopu, filtra sadaÄ¼Ä ir Ä«paÅ”s spraudnis - grok.
Neizvirzot sev mÄrÄ·i Å”eit sniegt detalizÄtu aprakstu (Å”ajÄ sakarÄ es atsaucos uz to
Lai to izdarÄ«tu, jums jÄizlemj par ievades virkÅu formÄtu. Man tie ir Å”Ädi:
1 INFORMÄCIJAS ziÅa1
2 KÄ»ÅŖDAS ziÅojums2
Tie. Vispirms ir identifikators, pÄc tam INFO/ERROR, tad vÄrds bez atstarpÄm.
Tas nav grūti, bet ar to pietiek, lai saprastu darbības principu.
TÄtad grok spraudÅa filtru sadaÄ¼Ä mums ir jÄdefinÄ mÅ«su virkÅu parsÄÅ”anas modelis.
Tas izskatÄ«sies Å”Ädi:
filter {
grok {
match => { "message" => ["%{INT:message_id} %{LOGLEVEL:message_type} %{WORD:message_text}"] }
}
}
BÅ«tÄ«bÄ tÄ ir regulÄra izteiksme. Tiek izmantoti gatavi modeļi, piemÄram, INT, LOGLEVEL, WORD. To aprakstu, kÄ arÄ« citus modeļus var atrast Å”eit
Tagad, izejot cauri Å”im filtram, mÅ«su virkne tiks pÄrveidota par trÄ«s lauku jaukÅ”anu: message_id, message_type, message_text.
Tie tiks parÄdÄ«ti izvades sadaļÄ.
ZiÅojumu marÅ”rutÄÅ”ana uz izvades sadaļu, izmantojot komandu if
Izvades sadaļÄ, kÄ mÄs atceramies, mÄs plÄnojÄm sadalÄ«t ziÅojumus divÄs plÅ«smÄs. Daži - kas ir iNFO, tiks izvadÄ«ti uz konsoli, un ar kļūdÄm mÄs izvadÄ«sim failÄ.
KÄ mÄs noŔķiram Å”os ziÅojumus? ProblÄmas stÄvoklis jau liecina par risinÄjumu - galu galÄ mums jau ir speciÄls lauks message_type, kurÄ var bÅ«t tikai divas vÄrtÄ«bas: INFO un ERROR. Pamatojoties uz to, mÄs izdarÄ«sim izvÄli, izmantojot if paziÅojumu.
if [message_type] == "ERROR" {
# ŠŠ“ŠµŃŃ Š²ŃŠ²Š¾Š“ŠøŠ¼ Š² ŃŠ°Š¹Š»
} else
{
# ŠŠ“ŠµŃŃ Š²ŃŠ²Š¾Š“ŠøŠ¼ Š² stdout
}
Å ajÄ sadaÄ¼Ä var atrast aprakstu par darbu ar laukiem un operatoriem
Tagad par paÅ”u faktisko secinÄjumu.
Konsoles izvade, Ŕeit viss ir skaidrs - stdout {}
Bet izvade uz failu - atcerieties, ka mÄs to visu palaižam no konteinera un, lai fails, kurÄ ierakstÄm rezultÄtu, bÅ«tu pieejams no Ärpuses, mums ir jÄatver Å”is direktorijs docker-compose.yml.
KopÄ:
MÅ«su faila izvades sadaļa izskatÄs Å”Ädi:
āØoutput {
if [message_type] == "ERROR" {
file {
path => "/usr/share/logstash/output/test.log"
codec => line { format => "custom format: %{message}"}
}
} else
{stdout {
}
}
}
VietnÄ docker-compose.yml izvadei pievienojam vÄl vienu sÄjumu:
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
MÄs to palaižam, izmÄÄ£inÄm un redzam sadalÄ«jumu divÄs plÅ«smÄs.
Avots: www.habr.com