ืืืื
ืืืื ืคืจืืกืช ืืขืจืืช ืืืจืช, ืขืืื ื ืืคื ื ืืฆืืจื ืืขืื ืืกืคืจ ืจื ืฉื ืืืื ืื ืฉืื ืื. ELK ื ืืืจ ืืืื. ืืืืจ ืื ืืืื ืื ืืกืืื ืฉืื ื ืืืืืจืช ืืืกื ืืช ืื.
ืื ืื ื ืื ืืฆืืืื ืืขื ืืชืืจ ืืช ืื ืืืืืืืช ืฉืื, ืืื ืื ืื ื ืจืืฆืื ืืืชืจืื ืืืืืื ืืคืชืจืื ืืขืืืช ืืขืฉืืืช. ืื ื ืืืข ืืืขืืืื ืฉืืืจืืช ืฉืืฉ ืืืืช ืื ืืืืื ืฉื ืชืืขืื ืืชืืื ืืช ืืืื ืืช, ืืฉ ืื ืืจืื ืืืืืืืช, ืืคืืืช ืืฆืื ื ืืืชื.
ืคืจืกื ื ืืช ืืืืกื ืืช ืืจื docker-compose. ืืชืจื ืืื, ืืื ืื ื docker-compose.yml ืืชืื ืืืื, ืฉืืคืฉืจ ืื ื ืืืขืืืช ืืช ืืขืจืืื ืืืขื ืืื ืืขืืืช. ืื ืจืื ืื ื ืฉืื ืืฆืืื ืืืจ ืงืจืื, ืขืืฉืื ื ืฉื ื ืืืชื ืงืฆืช ืืื ืฉืืชืืื ืืฆืจืืื ืฉืื ื ืืืื.
ืืจืืข ืืืื, ืื ืืกืืื ืืืืืืจ ืืช ืืืขืจืืช ืืงืื ืืืขืื ืืืื ืื ืืืืคืืืงืฆืื ืฉืื ื ืื ืืฆืืื ืืื. ืืื ืืืืื ื ืฉืืืื ืืืืื ืื ืืจืืื ืื ืคืจื, ืืื ืืืืืจ ืืงืฉืจืื.
ืื, ืืชืืื ื ืขื logstash.
ืกืืืื, ืคืจืืกื, ืืคืขืืช Logstash ืืงืื ืืืื ืจ
ืืคืจืืกื ืื ื ืืฉืชืืฉืื ื-docer-compose; ืื ืืกืืืื ืืืชืืืจืื ืืื ืืืฆืขื ืขื MacOS ื-Ubuntu 18.0.4.
ืชืืื ืช ื-logstash ืฉื ืจืฉืื ื-docker-compose.yml ืืืงืืจื ืฉืื ื ืืื docker.elastic.co/logstash/logstash:6.3.2
ื ืฉืชืืฉ ืื ืื ืืกืืืื.
ืืชืื ื docker-compose.yml ื ืคืจื ืืืคืขืืช logstash. ืืืืื ืฉืืื ืืคืฉืจ ืืืคืขืื ืืช ืืชืืื ื ืืฉืืจืช ืืคืงืืื, ืืื ืคืชืจื ื ืืขืื ืกืคืฆืืคืืช, ืฉืื ืื ืื ื ืืจืืฆืื ืืื ื-docker-compose.
ืืงืฆืจื ืขื ืงืืฆื ืชืฆืืจื
ืืืืงืื ืืืชืืืืจ, ื ืืชื ืืืจืืฅ ืืช logstash ืขืืืจ ืขืจืืฅ ืืื, ืืืืงืจื ืื ืืื ืฆืจืื ืืืขืืืจ ืืช ืงืืืฅ *.conf, ืื ืขืืืจ ืืกืคืจ ืขืจืืฆืื, ืืืืงืจื ืื ืืื ืฆืจืื ืืืขืืืจ ืืช ืืงืืืฅ pipelines.yml, ืืฉืจ ืืชืืจื , ืืงืฉืจ ืืงืืฆืื .conf ืขืืืจ ืื ืขืจืืฅ.
ืืืื ื ืืืจื ืืฉื ืืื. ืื ื ืจืื ืื ื ืืืชืจ ืืื ืืืจืกืื ืื ืืชื ืืืจืืื. ืืื ืืฆืจื ื ืืช pipelines.yml, ืืืฆืจื ื ืกืคืจืืืช pipelines ืื ื ืื ืืก ืงืืฆื .conf ืืื ืขืจืืฅ.
ืืชืื ืืงืื ืืืื ืจ ืืฉ ืงืืืฅ ืชืฆืืจื ื ืืกืฃ - logstash.yml. ืื ืื ื ืื ื ืืืขืื ืื, ืื ืื ื ืืฉืชืืฉืื ืื ืืคื ืฉืืื.
ืื, ืืื ื ืืกืคืจืืืช ืฉืื ื:
ืืื ืืงืื ื ืชืื ื ืงืื, ืืขืช ืขืชื ืื ื ืื ืืืื ืฉืืื tcp ืืืฆืืื 5046, ืืืคืื ื ืฉืชืืฉ ื-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 ืืืงืืจื (ืื ืฉืื ืื ืืขืจืืื ืืืฉืงืช) ืืื ื ืืืฉื ืฉืื ืื ืืฉืคืืขืื ืืืื ืขื ืืชืืื ื ืืืืืืช ืืื.
- ืื ื ืืืฆืจืื ืฉืืจืืช(ืื) ืืื ืฉื logstash ืืืชืืื ื ืฉื docker.elastic.co/logstash/logstash:6.3.2 ืื ืงืจื ืื 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 Unreachable: [http://elasticsearch:9200/][Manticore ::ResolutionFailure] elasticsearch", ...
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. ืื ื ืืชืงื ืืช 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][WARN ][logstash.outputs.elasticsearch] ื ืืกื ืืืืืืช ืืช ืืืืืืจ ืืืืคืข ES ืืช, ืื ืงืืื ืฉืืืื. {:url=>โ
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][WARN ][logstash.licensechecker.licensereader] ื ืืกื ืืืืืืช ืืช ืืืืืืจ ืืืืคืข ES ืืช, ืื ืงืืื ืฉืืืื. {:url=>โ
ืืืืืื ืฉืื ื ืืืื ืื ืืืื.
ืืื ืืืืฉืชื ืืืจืืง ืืช ืืืืืขื ืฉืืฆืื ืืจ ืืืฉืง ืืืฆืืื, ืืืืื ืืช ืืืืขืช ืืฉืืืื ืืืฆืืื ืืช ืืืืืขื ืขื ื ืืกืืื ืืืฆืืจ ืงืฉืจ
ืื ืงืืจื ืืืืืื ืฉ-logstash.conf, ืืืืื ืืชืืื ื, ืืืื ืืืืงื ืืืืื ืืช ืฉื elasticsearch. ืืืจื ืืื, logstash ืื ืื ืฉืืื ืขืืื ืืืืง ืืืกื ืืช ืืืืืืื, ืืื ืืคืจืื ื ืืืชื.
ืืคืฉืจ ืืขืืื, ืืื ืื ืื ื ืื.
ืืคืชืจืื ืืื ืืืฉืืืช ืืืืงื ืื ืืืืฆืขืืช ืืฉืชื ื ืืกืืืื 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
}
}
ืืืืืจ ื ืชืื ืื ืืงืืืฅ
ืืืืื ื ืื ืืืกืชืื ืขื ืืฆื ืืงืืืฅ. ืื ืื ืขืืื ืืฆืืื ืขื ืืงืืืฅ, ืื ืืืื ืืื ืฆืืจื ืืกืืื, ืืคืืืช ืืฉืืืืฉ ืืงืืื.
ืืคื ืืชืืืืจ, ืืฆื ืืคืขืืื ืฆืจืื ืืืืืช ืืืื ืืื ื -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 ื ืืืง (docker stop logstash_one_channel && docker rm logstash_one_channel), ืื ืฉืื ืืืจ ืื ืืืงืื. ืืืงืื ืืงืืืฅ ืฉืืืื ืืื ื ืงืจื ื ืฉืืจ ืืชืื ืืืืื. ืื ืชืคืขืื ืืืชื ืืืคืก, ืืื ืืงืื ืจืง ืฉืืจืืช ืืืฉืืช.
ืงืจืืืช ืงืืฆืื ืงืืืืื
ื ื ืื ืฉืื ืื ื ืืฉืืงืื ืืช logstash ืืคืขื ืืจืืฉืื ื, ืืื ืืืจ ืืฉ ืื ื ืืืื ืื ืืื ื ืจืืฆืื ืืขืื ืืืชื.
ืื ื ืจืืฅ logstash ืขื ืงืืข ืืงืื ืื ืืฉืชืืฉื ื ืืืขืื, ืื ื ืงืื ืืืื. ืจืง ืฉืืจืืช ืืืฉืืช ืืขืืืื ืขื ืืื logstash.
ืขื ืื ืช ืฉื ืืชื ืืืื ืืืฉืื ืฉืืจืืช ืืงืืฆืื ืงืืืืื ืืืขืื, ืขืืื ืืืืกืืฃ ืฉืืจื ื ืืกืคืช ืืืงืืข ืืงืื:
input {
file {
start_position => "beginning"
path => "/usr/share/logstash/input/*.log"
}
}
ืืชืจ ืขื ืื, ืืฉ ื ืืืื ืก: ืื ืืฉืคืืข ืจืง ืขื ืงืืฆืื ืืืฉืื ืฉ-logstash ืขืืืื ืื ืจืื. ืขืืืจ ืืืชื ืงืืฆืื ืฉืืืจ ืืื ืืฉืื ืืจืืืื ืฉื logstash, ืืื ืืืจ ืืืจ ืืช ืืืืื ืืืขืช ืืืงื ืืื ืจืง ืขืจืืื ืืืฉืื.
ืืืื ื ืขืฆืืจ ืืื ืื ืืื ืืช ืงืืข ืืงืื. ืืฉ ืขืืืื ืืคืฉืจืืืืช ืจืืืช, ืืื ืื ืืกืคืืง ืื ื ืื ืืกืืืื ื ืืกืคืื ืืขืช ืขืชื.
ื ืืชืื ืืฉืื ืื ื ืชืื ืื
ืืื ื ื ืกื ืืคืชืืจ ืืช ืืืขืื ืืืื, ื ื ืื ืฉืืฉ ืื ื ืืืืขืืช ืืขืจืืฅ ืืื, ืืืงื ืืื ืคืืจืืืืืืืช ืืืืงื ืืืืขืืช ืฉืืืื. ืื ืฉืื ืื ืืคื ืชื. ืืืงื ืื INFO, ืืืจืื ืื ืฉืืืื.
ืื ืื ื ืฆืจืืืื ืืืคืจืื ืืืชื ืืืฆืืื. ืึธืึตื. ืื ื ืืืชืืื ืืืืขืืช ืืืืข ืืขืจืืฅ ืืื, ืืืืืขืืช ืฉืืืื ืืขืจืืฅ ืืืจ.
ืืื ืืขืฉืืช ืืืช, ืขืืืจ ืืงืืข ืืงืื ืืกืื ืื ืืคืื.
ืืืืฆืขืืช ืงืืข ืืกืื ืื, ื ื ืชื ืืช ืืืืืขื ืื ืื ืกืช, ืื ืงืื ืืื ื hash (ืฆืืื ืืคืชื-ืขืจื), ืฉืืืชื ืืืจ ื ืืื ืืขืืื, ืืืืืจ. ืืคืจืง ืืคื ืืชื ืืื. ืืืืืืจ ืืคืื ื ืืืจ ืืืืขืืช ืื ืฉืื ืื ืืืช ืืขืจืืฅ ืฉืื.
ื ืืชืื ืืืืขื ืขื ืืจืืง
ืขื ืื ืช ืื ืชื ืืืจืืืืช ืืงืกื ืืืงืื ืืื ืกื ืฉืืืช, ืืฉื ื ืชืืกืฃ ืืืืื ืืงืืข ืืกืื ืื - grok.
ืืืื ืืืฆืื ืืขืฆืื ืืืืจื ืืชืช ืชืืืืจ ืืคืืจื ืฉืื ืืื (ืืฉืืื ืื ืื ื ืืชืืืืก
ืืื ืืขืฉืืช ืืืช, ืขืืื ืืืืืื ืขื ืืคืืจืื ืฉื ืืืจืืืืช ืืงืื. ืืฉ ืื ืืืชื ืืื:
ืืืืขืช ืืืืข ืืืช 1
2 ืืืืขืช ืฉืืืื2
ืึธืึตื. ืืืืื ืื ืงืืื, ืืื INFO/ERROR, ืืื ืืืื ืืืื ืืื ืจืืืืื.
ืื ืื ืงืฉื, ืืื ืื ืืกืคืืง ืืื ืืืืื ืืช ืขืงืจืื ืืคืขืืื.
ืื, ืืงืืข ืืกืื ืื ืฉื ืชืืกืฃ grok, ืขืืื ื ืืืืืืจ ืืคืืก ืื ืืชืื ืืืืจืืืืช ืฉืื ื.
ืื ืืืจืื ืื:
filter {
grok {
match => { "message" => ["%{INT:message_id} %{LOGLEVEL:message_type} %{WORD:message_text}"] }
}
}
ืืขืืงืจื ืฉื ืืืจ ืื ืืืืื ืจืืืืจื. ื ืขืฉื ืฉืืืืฉ ืืืคืืกืื ืืืื ืื, ืืืื INT, LOGLEVEL, WORD. ืืช ืืชืืืืจ ืฉืืื, ืืื ืื ืืคืืกืื ืืืจืื, ื ืืชื ืืืฆืื ืืื
ืืขืช, ืืืขืืจ ืืจื ืืืกื ื ืืื, ืืืืจืืืช ืฉืื ื ืชืืคืื ื-hash ืฉื ืฉืืืฉื ืฉืืืช: message_id, message_type, message_text.
ืื ืืืฆืื ืืงืืข ืืคืื.
ื ืืชืื ืืืืขืืช ืืืงืืข ืืคืื ืืืืฆืขืืช ืืคืงืืื 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