Танилцуулга
Хамгийн сүүлийн үеийн системээ ашиглах явцад бид олон тооны төрөл бүрийн логуудыг боловсруулах шаардлагатай тулгарсан. Бид ELK-ийг хэрэгсэл болгон сонгосон. Энэ нийтлэлд энэ стекийг тохируулах талаар бидний туршлагыг авч үзэх болно.
Бид түүний бүх чадварыг тайлбарлахыг зорьдоггүй, харин практик асуудлыг шийдвэрлэхэд анхаарлаа хандуулдаг. Учир нь өргөн хүрээний баримт бичиг, бэлэн зургуудыг үл харгалзан олон бэрхшээлүүд байдаг - ядаж бид тэдгээрийг олж мэдсэн.
Бид Docker-compose ашиглан стекийг байрлуулсан. Түүгээр ч зогсохгүй бидэнд сайн бичигдсэн Docker-compose.yml файл байсан бөгөөд энэ нь бидэнд стекийг ямар ч төвөггүй байршуулах боломжийг олгосон. Мөн бид ялалтад ойрхон байна гэж бодсон; бидний хэрэгцээнд нийцүүлэх хэдхэн өөрчлөлт, тэгээд л болоо.
Харамсалтай нь манай программаас бүртгэл хүлээн авах, боловсруулахын тулд системийг нарийн тааруулах анхны оролдлого амжилтгүй болсон. Тиймээс бид бүрэлдэхүүн хэсэг бүрийг тусад нь судалж, дараа нь тэдгээрийн холболт руу буцахаар шийдсэн.
Тиймээс, logstash-аас эхэлье.
Хүрээлэн буй орчин, байршуулалт, Logstash-ийг саванд ажиллуулах
Для развёртывания используем docker-compose, описанные здесь эксперименты проводились на MacOS и Ubuntu 18.0.4.
Манай анхны docker-compose.yml-д заасан logstash дүрс нь docker.elastic.co/logstash/logstash:6.3.2 юм.
Бид үүнийг туршилтанд ашиглах болно.
Logstash-ийг ажиллуулахын тулд бид тусдаа docker-compose.yml бичсэн. Мэдээжийн хэрэг, бид зургийг тушаалын мөрөөс ажиллуулж болох байсан, гэхдээ бид Docker-compose-ээс бүх зүйл ажилладаг тодорхой асуудлыг шийдэж байсан.
Тохиргооны файлуудын талаар товчхон
Тайлбараас харахад logstash-ийг нэг сувагт зориулж ажиллуулж болох бөгөөд энэ тохиолдолд *.conf файл эсвэл олон суваг дамжуулах шаардлагатай бөгөөд энэ тохиолдолд pipelines.yml файлыг дамжуулах шаардлагатай бөгөөд энэ нь эргээд суваг бүрийн .conf файлуудыг лавлах болно.
Бид хоёр дахь арга замаар явсан. Энэ нь илүү түгээмэл, өргөжүүлэх боломжтой мэт санагдсан. Тиймээс бид суваг бүрт .conf файлуудыг байрлуулах pipelines.yml файл болон дамжуулах хоолойн лавлах үүсгэсэн.
Контейнер дотор өөр тохиргооны файл байна—logstash.yml. Бид үүнийг зүгээр орхиж, байгаагаар нь ашиглах болно.
Тиймээс манай лавлахуудын бүтэц:

Одоохондоо оролтын өгөгдлийг хүлээн авахын тулд бид үүнийг 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
Бид энд юу харж байна вэ?
- Сүлжээнүүд болон ботьуудыг анхны docker-compose.yml (бүх стекийг ажиллуулдаг газар)-аас авсан бөгөөд тэдгээр нь ерөнхий дүр зурагт тийм ч их нөлөө үзүүлэхгүй гэж би бодож байна.
- Бид docker.elastic.co/logstash/logstash:6.3.2 зургаас нэг logstash үйлчилгээг үүсгэж, үүнийг logstash_one_channel гэж нэрлэнэ.
- Бид чингэлэг доторх 5046 портыг ижил дотоод порт руу шилжүүлдэг.
- Бид дамжуулах хоолойн тохиргооны файл ./config/pipelines.yml файлыг чингэлэг доторх /usr/share/logstash/config/pipelines.yml файл руу буулгаж, logstash үүнийг тэндээс авч, зөвхөн унших боломжтой болгоно.
- Бид сувгийн тохиргооны файлуудыг хадгалдаг ./config/pipelines лавлахыг /usr/share/logstash/config/pipelines сан руу буулгаж, зөвхөн унших боломжтой болгодог.

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
Мөн бид контейнер консол дээрх хариуг харж байна:

Гэхдээ үүнтэй зэрэгцэн бид дараахь зүйлийг харж байна.
logstash_one_channel | [2019-04-29T11:28:59,790][ERROR][logstash.licensechecker.licensereader] Лицензийн серверээс лицензийн мэдээллийг авах боломжгүй {:message=>“Elasticsearch-д хандах боломжгүй: [http://elasticsearch:9200/][Manticorea::Rechure”,]
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] X-Pack нь 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][МЭДЭЭЛЭЛ ][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::Outputs::ElasticSearch::HttpClient::Pool::HostUnreachableError, :error=>"Elasticsearch-д хандах боломжгүй: [http://elasticsearch:9200/][Manticorease:"
logstash_one_channel | [2019-04-29T11:29:04,704][МЭДЭЭЛЭЛ ][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::Outputs::ElasticSearch::HttpClient::Pool::HostUnreachableError, :error=>"Elasticsearch-д хандах боломжгүй: [http://elasticsearch:9200/][Manticorease:"
Мөн бидний гуалин мөлхөж байна.
Энд би дамжуулах хоолой амжилттай эхэлсэн гэсэн мессежийг ногоон өнгөөр, алдааны мессежийг улаанаар, холбоо барих оролдлогын тухай шараар тэмдэглэв. : 9200.
Энэ нь зурганд орсон logstash.conf файл нь elasticsearch-ийн бэлэн эсэхийг шалгахыг агуулж байгаатай холбоотой юм. Эцсийн эцэст, logstash үүнийг бидний салгасан Elk стекийн нэг хэсэг болгон ажиллаж байна гэж үздэг.
Энэ нь ажиллах боломжтой боловч тохиромжтой биш юм.
Үүний шийдэл нь 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 | }
Нэг суваг дотор ажилладаг
Тиймээс бид ажиллаж байна. Одоо бид Logstash-ийг өөрөө тохируулахад хэсэг хугацаа зарцуулж болно. Бид pipelines.yml файлыг одоогоор ганцаараа үлдээх болно; Ганц хоолойгоор юунд хүрч болохыг харцгаая.
Сувгийн тохиргооны файлтай ажиллах ерөнхий зарчмыг энд албан ёсны гарын авлагад сайн тайлбарласан гэж хэлэх хэрэгтэй
Хэрэв та орос хэл дээр уншихыг хүсвэл бид үүнийг ашигласан (гэхдээ асуулгын синтакс нь хуучин тул үүнийг анхаарч үзэх хэрэгтэй).
Оролтын хэсгээс дараалан хөдөлцгөөе. TCP хэрхэн ажилладагийг бид аль хэдийн харсан. Энд өөр юу сонирхолтой байж болох вэ?
Зүрхний цохилтыг ашиглан мессежийг шалгана уу
Автомат туршилтын мессеж үүсгэх сонирхолтой функц байдаг.
Үүнийг хийхийн тулд оролтын хэсэгт heartbean залгаасыг оруулах хэрэгтэй.
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-тэй төстэй байх ёстой, өөрөөр хэлбэл энэ нь шинэ мөрүүдийг унших эсвэл сонголтоор файлыг бүхэлд нь уншдаг.
Тэгэхээр, бид юу авахыг хүсч байна:
- Бид нэг бүртгэлийн файлд хавсаргасан мөрүүдийг хүлээн авахыг хүсч байна.
- Бид хэд хэдэн бүртгэлийн файлд бичигдсэн өгөгдлийг хүлээн авахын зэрэгцээ хаанаас хүлээн авсаныг нь салгах боломжтой байхыг хүсч байна.
- Бид logstash-ийг дахин эхлүүлэх үед энэ өгөгдлийг дахин хүлээн авахгүй гэдгийг баталгаажуулахыг хүсч байна.
- Хэрэв Logstash идэвхгүй болсон ч өгөгдлийг файлууд руу үргэлжлүүлэн бичиж байгаа бол үүнийг эхлүүлэх үед бид энэ өгөгдлийг хүлээн авах болно гэдгийг шалгахыг хүсч байна.
Туршилтыг хийхийн тулд 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 | }
Маш сайн! Файлыг авсан, замыг зөв зааж өгсөн, бүх зүйл хэвийн байна.
Logstash-ыг зогсоож дахин эхлүүлье. Хүлээцгээе. Чимээгүй. Өөрөөр хэлбэл, бид эдгээр бүртгэлийг дахин хүлээж авахгүй.
Одоо хамгийн зоригтой туршилт.
Logstash суулгаад ажиллуулна уу:
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 контейнер устгагдсан бол (докер зогсоол logstash_one_channel && docker rm logstash_one_channel) юу ч авахгүй. Уншсан файлын байрлалыг чингэлэг дотор хадгалсан. Хэрэв та үүнийг эхнээс нь эхлүүлэх юм бол энэ нь зөвхөн шинэ мөрүүдийг хүлээн авах болно.
Одоо байгаа файлуудыг уншиж байна
Бид анх удаа logstash ажиллуулж байна гэж бодъё, гэхдээ бидэнд бүртгэлүүд байгаа бөгөөд тэдгээрийг боловсруулахыг хүсэж байна.
Хэрэв бид дээр ашигласан оролтын хэсэгтэй logstash-ийг ажиллуулбал бид юу ч авахгүй. Зөвхөн шинэ мөрүүдийг logstash боловсруулна.
Одоо байгаа файлуудаас мөр татахын тулд оролтын хэсэгт нэмэлт мөр нэмэх хэрэгтэй.
input {
file {
start_position => "beginning"
path => "/usr/share/logstash/input/*.log"
}
}
Анхааруулга байна: энэ нь зөвхөн Logstash хараахан хараагүй байгаа шинэ файлуудад хамаарна. Logstash-ийн аль хэдийн үзсэн файлуудын хувьд энэ нь тэдний хэмжээг аль хэдийн санаж байгаа бөгөөд одоо зөвхөн шинэ бичлэгүүдийг оруулах болно.
Энд зогсоод оролтын хэсгийг судалцгаая. Өөр олон сонголтууд байгаа ч одоогоор энэ нь цаашдын туршилт хийхэд хангалттай.
Өгөгдлийн чиглүүлэлт ба хувиргалт
Дараах асуудлыг шийдэж үзье. Бидэнд нэг сувгаас ирсэн мессежүүд байна гэж бодъё, тэдгээрийн зарим нь мэдээллийн шинжтэй, зарим нь алдааны мессежүүд байна. Тэд шошгоороо ялгагдана. Зарим нь МЭДЭЭЛЭЛ, зарим нь АЛДАА.
Бид тэдгээрийг гаралт дээр нь салгах хэрэгтэй. Өөрөөр хэлбэл, бид нэг суваг руу мэдээллийн мессеж, нөгөө суваг руу алдааны мессеж бичдэг.
Үүнийг хийхийн тулд бид оролтын хэсгээс шүүлтүүр, гаралт руу шилждэг.
Шүүлтүүрийн хэсгийг ашиглан бид ирж буй мессежийг задлан шинжилж, хэш (түлхүүр-утга хос)-ыг задлах бөгөөд ингэснээр бид үүнийг боловсруулж, өөрөөр хэлбэл өөрсдийн нөхцөлийн дагуу задлан шинжилж болно. Мөн гаралтын хэсэгт бид мессежийг сонгож, тус бүрийг өөрийн суваг руу илгээх болно.
Grok ашиглан мессежийг задлан шинжилж байна
Текстийн мөрүүдийг задлан шинжилж, тэдгээрээс олон талбар авахын тулд шүүлтүүрийн хэсэг нь тусгай залгаастай - grok.
Би энэ талаар дэлгэрэнгүй тайлбарлахыг зорьсонгүй (үүнийг би энд дурдъя ), Би энгийн жишээ хэлье.
Үүнийг хийхийн тулд та оролтын мөрүүдийн форматыг шийдэх хэрэгтэй. Минийх иймэрхүү байна:
1 МЭДЭЭЛЭЛИЙН мессеж1
2 АЛДААНЫ мессеж2
Өөрөөр хэлбэл эхлээд танигч, дараа нь INFO/ERROR, дараа нь хоосон зайгүй зарим үг гарч ирнэ.
Энэ нь төвөгтэй биш боловч үйл ажиллагааны зарчмыг ойлгоход хангалттай.
Тиймээс, шүүлтүүрийн хэсэгт, grok залгаас дээр бид мөрүүдийг задлан шинжлэх загварыг тодорхойлох ёстой.
Энэ нь дараах байдлаар харагдах болно.
filter {
grok {
match => { "message" => ["%{INT:message_id} %{LOGLEVEL:message_type} %{WORD:message_text}"] }
}
}
Үндсэндээ энэ нь тогтмол илэрхийлэл юм. Энэ нь INT, LOGLEVEL, WORD гэх мэт бэлэн загваруудыг ашигладаг. Тэдний тайлбар, түүнчлэн бусад хэв маягийг эндээс олж болно.
Одоо энэ шүүлтүүрээр дамжин өнгөрөхөд бидний мөр гурван талбарын хэш болж хувирна: message_id, мессежийн_төрөл, мессежийн_текст.
Эдгээр нь гаралтын хэсэгт харагдах болно.
If командыг ашиглан гаралтын хэсэг дэх мессежүүдийг чиглүүлэх
Гаралтын хэсэгт, бидний санаж байгаагаар бид мессежийг хоёр урсгал болгон хуваах гэж байсан. iNFO агуулсан нь консол руу гарах бол алдаа агуулсан нь файлд гарна.
Бид эдгээр мессежийг хэрхэн ялгах вэ? Асуудлын мэдэгдэл аль хэдийн шийдлийг санал болгож байна-бидэнд аль хэдийн тусгайлсан message_type талбар байгаа бөгөөд энэ нь зөвхөн 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
