ΠΠΎΠ²Π΅Π΄
ΠΡΠΈ ΡΠ°ΡΠΏΠΎΡΠ΅Π΄ΡΠ²Π°ΡΠ΅ΡΠΎ Π½Π° Π΄ΡΡΠ³ ΡΠΈΡΡΠ΅ΠΌ, ΡΠ΅ ΡΠΎΠΎΡΠΈΠ²ΠΌΠ΅ ΡΠΎ ΠΏΠΎΡΡΠ΅Π±Π°ΡΠ° Π΄Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΈΠΌΠ΅ Π³ΠΎΠ»Π΅ΠΌ Π±ΡΠΎΡ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ Π»ΠΎΠ³ΠΎΠ²ΠΈ. ΠΠΠ Π±Π΅ΡΠ΅ ΠΈΠ·Π±ΡΠ°Π½ ΠΊΠ°ΠΊΠΎ Π°Π»Π°ΡΠΊΠ°. ΠΠ²Π°Π° ΡΡΠ°ΡΠΈΡΠ° ΡΠ΅ Π³ΠΎ ΡΠ°Π·Π³Π»Π΅Π΄Π° Π½Π°ΡΠ΅ΡΠΎ ΠΈΡΠΊΡΡΡΠ²ΠΎ Π²ΠΎ ΠΏΠΎΡΡΠ°Π²ΡΠ²Π°ΡΠ΅ΡΠΎ Π½Π° ΠΎΠ²ΠΎΡ ΠΎΡΠ°ΠΊ.
ΠΠ΅ ΡΠΈ ΠΏΠΎΡΡΠ°Π²ΡΠ²Π°ΠΌΠ΅ ΡΠ΅Π» Π΄Π° Π³ΠΈ ΠΎΠΏΠΈΡΠ΅ΠΌΠ΅ ΡΠΈΡΠ΅ Π½Π΅Π³ΠΎΠ²ΠΈ ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡΠΈ, ΡΡΠΊΡ ΡΠ°ΠΊΠ°ΠΌΠ΅ Π΄Π° ΡΠ΅ ΠΊΠΎΠ½ΡΠ΅Π½ΡΡΠΈΡΠ°ΠΌΠ΅ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎ Π½Π° ΡΠ΅ΡΠ°Π²Π°ΡΠ΅ Π½Π° ΠΏΡΠ°ΠΊΡΠΈΡΠ½ΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈ. ΠΠ²Π° ΡΠ΅ Π΄ΠΎΠ»ΠΆΠΈ Π½Π° ΡΠ°ΠΊΡΠΎΡ Π΄Π΅ΠΊΠ° ΠΈΠ°ΠΊΠΎ ΠΈΠΌΠ° ΠΏΡΠΈΠ»ΠΈΡΠ½ΠΎ Π³ΠΎΠ»Π΅ΠΌΠ° ΠΊΠΎΠ»ΠΈΡΠΈΠ½Π° Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠ° ΠΈ Π³ΠΎΡΠΎΠ²ΠΈ ΡΠ»ΠΈΠΊΠΈ, ΠΈΠΌΠ° Π΄ΠΎΡΡΠ° ΡΡΠ°ΠΏΠΈΡΠΈ, Π±Π°ΡΠ΅ΠΌ Π½ΠΈΠ΅ Π³ΠΈ Π½Π°ΡΠ΄ΠΎΠ²ΠΌΠ΅.
ΠΠΎ ΡΠ°ΡΠΏΠΎΡΠ΅Π΄ΠΈΠ²ΠΌΠ΅ ΡΡΠ΅ΠΊΠΎΡ ΠΏΡΠ΅ΠΊΡ docker-compose. ΠΠΎΠΊΡΠ°Ρ ΡΠΎΠ°, ΠΈΠΌΠ°Π²ΠΌΠ΅ Π΄ΠΎΠ±ΡΠΎ Π½Π°ΠΏΠΈΡΠ°Π½Π° docker-compose.yml, ΠΊΠΎΡΠ° Π½ΠΈ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΠΈ Π΄Π° Π³ΠΎ ΠΏΠΎΠ΄ΠΈΠ³Π½Π΅ΠΌΠ΅ ΡΡΠ΅ΠΊΠΎΡ ΡΠ΅ΡΠΈΡΠΈ Π±Π΅Π· ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈ. Π Π½ΠΈ ΡΠ΅ ΡΠΈΠ½Π΅ΡΠ΅ Π΄Π΅ΠΊΠ° ΠΏΠΎΠ±Π΅Π΄Π°ΡΠ° Π΅ Π²Π΅ΡΠ΅ Π±Π»ΠΈΡΠΊΡ, ΡΠ΅Π³Π° ΡΠ΅ ΡΠ° Π΄ΠΎΡΠ΅ΡΡΠ²Π°ΠΌΠ΅ ΠΌΠ°Π»ΠΊΡ Π·Π° Π΄Π° ΠΎΠ΄Π³ΠΎΠ²Π°ΡΠ° Π½Π° Π½Π°ΡΠΈΡΠ΅ ΠΏΠΎΡΡΠ΅Π±ΠΈ ΠΈ ΡΠΎΠ° Π΅ ΡΠΎΠ°.
ΠΠ° ΠΆΠ°Π», ΠΎΠ±ΠΈΠ΄ΠΎΡ Π΄Π° ΡΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ° ΡΠΈΡΡΠ΅ΠΌΠΎΡ Π΄Π° ΠΏΡΠΈΠΌΠ° ΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠ²Π° Π΄Π½Π΅Π²Π½ΠΈΡΠΈ ΠΎΠ΄ Π½Π°ΡΠ°ΡΠ° Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ° Π½Π΅ Π±Π΅ΡΠ΅ Π²Π΅Π΄Π½Π°Ρ ΡΡΠΏΠ΅ΡΠ΅Π½. ΠΠ°ΡΠΎΠ°, ΡΠ΅ΡΠΈΠ²ΠΌΠ΅ Π΄Π΅ΠΊΠ° Π²ΡΠ΅Π΄ΠΈ Π΄Π° ΡΠ΅ ΠΏΡΠΎΡΡΡΠ²Π° ΡΠ΅ΠΊΠΎΡΠ° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ° ΠΏΠΎΡΠ΅Π±Π½ΠΎ, Π° ΠΏΠΎΡΠΎΠ° Π΄Π° ΡΠ΅ Π²ΡΠ°ΡΠΈΠΌΠ΅ Π½Π° Π½ΠΈΠ²Π½ΠΈΡΠ΅ Π²ΡΡΠΊΠΈ.
ΠΠ½Π°ΡΠΈ, ΠΏΠΎΡΠ½Π°Π²ΠΌΠ΅ ΡΠΎ logstash.
ΠΠΈΠ²ΠΎΡΠ½Π° ΡΡΠ΅Π΄ΠΈΠ½Π°, ΡΠ°ΡΠΏΠΎΡΠ΅Π΄ΡΠ²Π°ΡΠ΅, Π²ΠΎΠ΄Π΅ΡΠ΅ Logstash Π²ΠΎ ΠΊΠΎΠ½ΡΠ΅ΡΠ½Π΅Ρ
ΠΠ° ΡΠ°ΡΠΏΠΎΡΠ΅Π΄ΡΠ²Π°ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠΈΠΌΠ΅ docker-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 Π½Π΅Π΄ΠΎΡΡΠ°ΠΏΠ½ΠΎ: [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][ΠΠ ΠΠΠ£ΠΠ ΠΠΠ£ΠΠΠΠ ][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][ΠΠ ΠΠΠ£ΠΠ ΠΠΠ£ΠΠΠΠ ][logstash.licensechecker.licensereader] Π‘Π΅ ΠΎΠ±ΠΈΠ΄Π΅ Π΄Π° ΡΠ° ΠΎΠΆΠΈΠ²Π΅Π΅ Π²ΡΡΠΊΠ°ΡΠ° ΡΠΎ ΠΌΡΡΠ²ΠΈΠΎΡ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠΊ ES, Π½ΠΎ Π΄ΠΎΠ±ΠΈ Π³ΡΠ΅ΡΠΊΠ°. {:url=>β
Π Π½Π°ΡΠΈΠΎΡ Π΄Π½Π΅Π²Π½ΠΈΠΊ ΠΏΠΎΡΡΠΎΡΠ°Π½ΠΎ ΡΠ΅ ΠΏΡΠΈΠΊΡΠ°Π΄ΡΠ²Π°.
ΠΠ²Π΄Π΅ ΡΠ° ΠΈΡΡΠ°ΠΊΠ½Π°Π² ΡΠΎ Π·Π΅Π»Π΅Π½ΠΎ ΠΏΠΎΡΠ°ΠΊΠ°ΡΠ° Π΄Π΅ΠΊΠ° Π³Π°ΡΠΎΠ²ΠΎΠ΄ΠΎΡ Π΅ ΡΡΠΏΠ΅ΡΠ½ΠΎ ΡΡΠ°ΡΡΡΠ²Π°Π½, ΡΠΎ ΡΡΠ²Π΅Π½ΠΎ ΠΏΠΎΡΠ°ΠΊΠ°ΡΠ° Π·Π° Π³ΡΠ΅ΡΠΊΠ° ΠΈ ΡΠΎ ΠΆΠΎΠ»ΡΠ° ΠΏΠΎΡΠ°ΠΊΠ°ΡΠ° Π·Π° ΠΎΠ±ΠΈΠ΄ Π·Π° ΠΊΠΎΠ½ΡΠ°ΠΊΡ
ΠΠ²Π° ΡΠ΅ ΡΠ»ΡΡΡΠ²Π° Π·Π°ΡΠΎΠ° ΡΡΠΎ 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
}
}
ΠΡΠ°ΡΠ°ΡΠ΅ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ ΠΎΠ΄ Π΄Π°ΡΠΎΡΠ΅ΠΊΠ°
Π Π΅ΡΠΈΠ²ΠΌΠ΅ Π΄Π° Π³ΠΎ ΡΠ°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ ΠΈ ΡΠ΅ΠΆΠΈΠΌΠΎΡ Π½Π° Π΄Π°ΡΠΎΡΠ΅ΠΊΠ°. ΠΠΊΠΎ ΡΠ°Π±ΠΎΡΠΈ Π΄ΠΎΠ±ΡΠΎ ΡΠΎ Π΄Π°ΡΠΎΡΠ΅ΠΊΠ°ΡΠ°, ΡΠΎΠ³Π°Ρ ΠΌΠΎΠΆΠ΅Π±ΠΈ Π½Π΅ Π΅ ΠΏΠΎΡΡΠ΅Π±Π΅Π½ Π°Π³Π΅Π½Ρ, Π±Π°ΡΠ΅ΠΌ Π·Π° Π»ΠΎΠΊΠ°Π»Π½Π° ΡΠΏΠΎΡΡΠ΅Π±Π°.
Π‘ΠΏΠΎΡΠ΅Π΄ ΠΎΠΏΠΈΡΠΎΡ, ΡΠ΅ΠΆΠΈΠΌΠΎΡ Π½Π° ΡΠ°Π±ΠΎΡΠ° ΡΡΠ΅Π±Π° Π΄Π° Π±ΠΈΠ΄Π΅ ΡΠ»ΠΈΡΠ΅Π½ Π½Π° ΠΎΠΏΠ°ΡΠΊΠ°ΡΠ° -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, ΡΠΎΡ Π²Π΅ΡΠ΅ ΡΠ° Π·Π°ΠΏΠΎΠΌΠ½ΠΈ Π½ΠΈΠ²Π½Π°ΡΠ° Π³ΠΎΠ»Π΅ΠΌΠΈΠ½Π° ΠΈ ΡΠ΅Π³Π° ΡΠ΅ Π·Π΅ΠΌΠ° ΡΠ°ΠΌΠΎ Π½ΠΎΠ²ΠΈ Π·Π°ΠΏΠΈΡΠΈ Π²ΠΎ Π½ΠΈΠ².
ΠΡΠ΄Π΅ Π΄Π° Π·Π°ΡΡΠ°Π½Π΅ΠΌΠ΅ ΠΎΠ²Π΄Π΅ ΠΈ Π΄Π° Π³ΠΎ ΠΏΡΠΎΡΡΠΈΠΌΠ΅ Π΄Π΅Π»ΠΎΡ Π·Π° Π²Π½Π΅ΡΡΠ²Π°ΡΠ΅. ΠΠΌΠ° ΡΡΡΠ΅ ΠΌΠ½ΠΎΠ³Ρ ΠΎΠΏΡΠΈΠΈ, Π½ΠΎ ΡΠΎΠ° Π½ΠΈ Π΅ Π΄ΠΎΠ²ΠΎΠ»Π½ΠΎ Π·Π° ΠΏΠΎΠ½Π°ΡΠ°ΠΌΠΎΡΠ½ΠΈ Π΅ΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠΈ Π·Π°ΡΠ΅Π³Π°.
Π ΡΡΠΈΡΠ°ΡΠ΅ ΠΈ ΡΡΠ°Π½ΡΡΠΎΡΠΌΠ°ΡΠΈΡΠ° Π½Π° ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ
ΠΡΠ΄Π΅ Π΄Π° ΡΠ΅ ΠΎΠ±ΠΈΠ΄Π΅ΠΌΠ΅ Π΄Π° Π³ΠΎ ΡΠ΅ΡΠΈΠΌΠ΅ ΡΠ»Π΅Π΄Π½ΠΈΠΎΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌ, Π΄Π° ΡΠ΅ΡΠ΅ΠΌΠ΅ Π΄Π΅ΠΊΠ° ΠΈΠΌΠ°ΠΌΠ΅ ΠΏΠΎΡΠ°ΠΊΠΈ ΠΎΠ΄ Π΅Π΄Π΅Π½ ΠΊΠ°Π½Π°Π», Π½Π΅ΠΊΠΎΠΈ ΠΎΠ΄ Π½ΠΈΠ² ΡΠ΅ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠ²Π½ΠΈ, Π° Π½Π΅ΠΊΠΎΠΈ ΡΠ΅ ΠΏΠΎΡΠ°ΠΊΠΈ Π·Π° Π³ΡΠ΅ΡΠΊΠ°. Π’ΠΈΠ΅ ΡΠ΅ ΡΠ°Π·Π»ΠΈΠΊΡΠ²Π°Π°Ρ ΠΏΠΎ ΠΎΠ·Π½Π°ΠΊΠ°. ΠΠ΅ΠΊΠΎΠΈ ΡΠ΅ ΠΠΠ€Π, Π΄ΡΡΠ³ΠΈ ΡΠ΅ ΠΠ ΠΠ¨ΠΠ.
Π’ΡΠ΅Π±Π° Π΄Π° Π³ΠΈ ΠΎΠ΄Π²ΠΎΠΈΠΌΠ΅ Π½Π° ΠΈΠ·Π»Π΅Π·ΠΎΡ. ΠΠ½ΠΈΠ΅. ΠΠ° Π΅Π΄Π΅Π½ ΠΊΠ°Π½Π°Π» ΠΏΠΈΡΡΠ²Π°ΠΌΠ΅ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠ²Π½ΠΈ ΠΏΠΎΡΠ°ΠΊΠΈ, Π° Π½Π° Π΄ΡΡΠ³ ΠΏΠΎΡΠ°ΠΊΠΈ Π·Π° Π³ΡΠ΅ΡΠΊΠΈ.
ΠΠ° Π΄Π° Π³ΠΎ Π½Π°ΠΏΡΠ°Π²ΠΈΡΠ΅ ΠΎΠ²Π°, ΠΏΡΠ΅ΠΌΠ΅ΡΡΠ΅ΡΠ΅ ΡΠ΅ ΠΎΠ΄ Π΄Π΅Π»ΠΎΡ Π·Π° Π²Π½Π΅ΡΡΠ²Π°ΡΠ΅ Π΄ΠΎ ΡΠΈΠ»ΡΠ΅Ρ ΠΈ ΠΈΠ·Π»Π΅Π·.
ΠΠΎΡΠΈΡΡΠ΅ΡΡΠΈ Π³ΠΎ Π΄Π΅Π»ΠΎΡ Π·Π° ΡΠΈΠ»ΡΡΠΈ, ΡΠ΅ ΡΠ° Π°Π½Π°Π»ΠΈΠ·ΠΈΡΠ°ΠΌΠ΅ Π΄ΠΎΡΠ΄ΠΎΠ²Π½Π°ΡΠ° ΠΏΠΎΡΠ°ΠΊΠ°, Π΄ΠΎΠ±ΠΈΠ²Π°ΡΡΠΈ Ρ Π°Ρ (ΠΏΠ°ΡΠΎΠ²ΠΈ ΠΊΠ»ΡΡ-Π²ΡΠ΅Π΄Π½ΠΎΡΡ) ΠΎΠ΄ Π½Π΅Π°, ΡΠΎ ΠΊΠΎΠΈ Π²Π΅ΡΠ΅ ΠΌΠΎΠΆΠ΅ΠΌΠ΅ Π΄Π° ΡΠ°Π±ΠΎΡΠΈΠΌΠ΅, Ρ.Π΅. ΡΠ°ΡΠΊΠ»ΠΎΠΏΡΠ²Π°ΡΡΠ΅ ΡΠΏΠΎΡΠ΅Π΄ ΡΡΠ»ΠΎΠ²ΠΈΡΠ΅. Π Π²ΠΎ Π΄Π΅Π»ΠΎΡ Π·Π° ΠΈΠ·Π»Π΅Π·, ΡΠ΅ ΠΈΠ·Π±Π΅ΡΠ΅ΠΌΠ΅ ΠΏΠΎΡΠ°ΠΊΠΈ ΠΈ ΡΠ΅ ΡΠ° ΠΈΡΠΏΡΠ°ΡΠΈΠΌΠ΅ ΡΠ΅ΠΊΠΎΡΠ° Π½Π° ΡΠ²ΠΎΡ ΠΊΠ°Π½Π°Π».
ΠΠ°ΡΡΠΈΡΠ°ΡΠ΅ Π½Π° ΠΏΠΎΡΠ°ΠΊΠ° ΡΠΎ Π³ΡΠΎΠΊ
ΠΠ° Π΄Π° Π³ΠΈ Π°Π½Π°Π»ΠΈΠ·ΠΈΡΠ°ΡΠ΅ ΡΠ΅ΠΊΡΡΡΠ°Π»Π½ΠΈΡΠ΅ Π½ΠΈΠ·ΠΈ ΠΈ Π΄Π° Π΄ΠΎΠ±ΠΈΠ΅ΡΠ΅ Π·Π±ΠΈΡ Π½Π° ΠΏΠΎΠ»ΠΈΡΠ° ΠΎΠ΄ Π½ΠΈΠ², Π²ΠΎ Π΄Π΅Π»ΠΎΡ Π·Π° ΡΠΈΠ»ΡΡΠΈ ΠΈΠΌΠ° ΠΏΠΎΡΠ΅Π±Π΅Π½ Π΄ΠΎΠ΄Π°ΡΠΎΠΊ - Π³ΡΠΎΠΊ.
ΠΠ΅Π· Π΄Π° ΡΠΈ ΠΏΠΎΡΡΠ°Π²ΡΠ²Π°ΠΌ ΡΠ΅Π» Π΄Π° Π΄Π°Π΄Π°ΠΌ Π΄Π΅ΡΠ°Π»Π΅Π½ ΠΎΠΏΠΈΡ Π·Π° ΡΠΎΠ° ΠΎΠ²Π΄Π΅ (Π·Π° ΠΎΠ²Π° ΡΠ΅ ΠΏΠΎΠ²ΠΈΠΊΡΠ²Π°ΠΌ
ΠΠ° Π΄Π° Π³ΠΎ Π½Π°ΠΏΡΠ°Π²ΠΈΡΠ΅ ΠΎΠ²Π°, ΡΡΠ΅Π±Π° Π΄Π° ΠΎΠ΄Π»ΡΡΠΈΡΠ΅ Π·Π° ΡΠΎΡΠΌΠ°ΡΠΎΡ Π½Π° Π²Π»Π΅Π·Π½ΠΈΡΠ΅ Π½ΠΈΠ·ΠΈ. ΠΠΈ ΠΈΠΌΠ°ΠΌ Π²Π°ΠΊΠ°:
1 ΠΠΠ€Π ΠΏΠΎΡΠ°ΠΊΠ°1
2 ΠΠΎΡΠ°ΠΊΠ° Π·Π° ΠΠ ΠΠ¨ΠΠ2
ΠΠ½ΠΈΠ΅. ΠΡΠ²ΠΎ Π΄ΠΎΠ°ΡΠ° ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠΎΡ, ΠΏΠΎΡΠΎΠ° INFO/ERROR, ΠΏΠ° Π½Π΅ΠΊΠΎΡ Π·Π±ΠΎΡ Π±Π΅Π· ΠΏΡΠ°Π·Π½ΠΈ ΠΌΠ΅ΡΡΠ°.
ΠΠ΅ Π΅ ΡΠ΅ΡΠΊΠΎ, Π½ΠΎ Π΄ΠΎΠ²ΠΎΠ»Π½ΠΎ Π΅ Π΄Π° ΡΠ΅ ΡΠ°Π·Π±Π΅ΡΠ΅ ΠΏΡΠΈΠ½ΡΠΈΠΏΠΎΡ Π½Π° ΡΠ°Π±ΠΎΡΠ°.
ΠΠ½Π°ΡΠΈ, Π²ΠΎ Π΄Π΅Π»ΠΎΡ Π·Π° ΡΠΈΠ»ΡΡΠΈ Π½Π° ΠΏΡΠΈΠΊΠ»ΡΡΠΎΠΊΠΎΡ grok, ΠΌΠΎΡΠ° Π΄Π° Π΄Π΅ΡΠΈΠ½ΠΈΡΠ°ΠΌΠ΅ ΡΠ΅ΠΌΠ° Π·Π° ΠΏΠ°ΡΡΠΈΡΠ°ΡΠ΅ Π½Π° Π½Π°ΡΠΈΡΠ΅ ΠΆΠΈΡΠΈ.
ΠΠ΅ ΠΈΠ·Π³Π»Π΅Π΄Π° Π²Π°ΠΊΠ°:
filter {
grok {
match => { "message" => ["%{INT:message_id} %{LOGLEVEL:message_type} %{WORD:message_text}"] }
}
}
ΠΠΎ ΡΡΡΡΠΈΠ½Π° ΡΠΎΠ° Π΅ ΡΠ΅Π΄ΠΎΠ²Π΅Π½ ΠΈΠ·ΡΠ°Π·. Π‘Π΅ ΠΊΠΎΡΠΈΡΡΠ°Ρ Π³ΠΎΡΠΎΠ²ΠΈ ΠΎΠ±ΡΠ°ΡΡΠΈ, ΠΊΠ°ΠΊΠΎ ΡΡΠΎ ΡΠ΅ INT, LOGLEVEL, WORD. ΠΠΈΠ²Π½ΠΈΠΎΡ ΠΎΠΏΠΈΡ, ΠΊΠ°ΠΊΠΎ ΠΈ Π΄ΡΡΠ³ΠΈ ΠΎΠ±ΡΠ°ΡΡΠΈ, ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ Π½Π°ΡΠ΄Π°Ρ ΠΎΠ²Π΄Π΅
Π‘Π΅Π³Π°, ΠΏΠΎΠΌΠΈΠ½ΡΠ²Π°ΡΡΠΈ Π½ΠΈΠ· ΠΎΠ²ΠΎΡ ΡΠΈΠ»ΡΠ΅Ρ, Π½Π°ΡΠ°ΡΠ° Π½ΠΈΠ·Π° ΡΠ΅ ΡΠ΅ ΠΏΡΠ΅ΡΠ²ΠΎΡΠΈ Π²ΠΎ Ρ Π°Ρ ΠΎΠ΄ ΡΡΠΈ ΠΏΠΎΠ»ΠΈΡΠ°: ΠΏΠΎΡΠ°ΠΊΠ°_ΠΈΠ΄, ΠΏΠΎΡΠ°ΠΊΠ°_ΡΠΈΠΏ, ΠΏΠΎΡΠ°ΠΊΠ°_ΡΠ΅ΠΊΡΡ.
Π’ΠΈΠ΅ ΡΠ΅ Π±ΠΈΠ΄Π°Ρ ΠΏΡΠΈΠΊΠ°ΠΆΠ°Π½ΠΈ Π²ΠΎ Π΄Π΅Π»ΠΎΡ Π·Π° ΠΈΠ·Π»Π΅Π·.
Π ΡΡΠΈΡΠ°ΡΠ΅ Π½Π° ΠΏΠΎΡΠ°ΠΊΠΈ Π΄ΠΎ Π΄Π΅Π»ΠΎΡ Π·Π° ΠΈΠ·Π»Π΅Π· ΠΊΠΎΡΠΈΡΡΠ΅ΡΡΠΈ ΡΠ° ΠΊΠΎΠΌΠ°Π½Π΄Π°ΡΠ° if
ΠΠΎ Π΄Π΅Π»ΠΎΡ Π·Π° ΠΈΠ·Π»Π΅Π·, ΠΊΠ°ΠΊΠΎ ΡΡΠΎ ΡΠ΅ ΡΠ΅ΡΠ°Π²Π°ΠΌΠ΅, ΡΡΠ΅Π±Π°ΡΠ΅ Π΄Π° Π³ΠΈ ΠΏΠΎΠ΄Π΅Π»ΠΈΠΌΠ΅ ΠΏΠΎΡΠ°ΠΊΠΈΡΠ΅ Π½Π° Π΄Π²Π° ΡΠ΅ΠΊΠΎΠ²ΠΈ. ΠΠ΅ΠΊΠΎΠΈ - ΠΊΠΎΠΈ ΡΠ΅ iNFO, ΡΠ΅ Π±ΠΈΠ΄Π°Ρ ΠΈΠ·Π»Π΅Π·Π½ΠΈ Π½Π° ΠΊΠΎΠ½Π·ΠΎΠ»Π°ΡΠ°, Π° ΡΠΎ Π³ΡΠ΅ΡΠΊΠΈ, ΡΠ΅ ΠΈΠ·Π»Π΅Π·Π΅ΠΌΠ΅ Π²ΠΎ Π΄Π°ΡΠΎΡΠ΅ΠΊΠ°.
ΠΠ°ΠΊΠΎ Π΄Π° Π³ΠΈ ΡΠ°Π·Π΄Π΅Π»ΠΈΠΌΠ΅ ΠΎΠ²ΠΈΠ΅ ΠΏΠΎΡΠ°ΠΊΠΈ? Π‘ΠΎΡΡΠΎΡΠ±Π°ΡΠ° Π½Π° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΎΡ Π²Π΅ΡΠ΅ ΡΡΠ³Π΅ΡΠΈΡΠ° ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ - Π½Π° ΠΊΡΠ°ΡΠΎΡ Π½Π° ΠΊΡΠ°ΠΈΡΡΠ°ΡΠ°, Π½ΠΈΠ΅ Π²Π΅ΡΠ΅ ΠΈΠΌΠ°ΠΌΠ΅ ΠΏΠΎΡΠ²Π΅ΡΠ΅Π½ΠΎ ΠΏΠΎΠ»Π΅ Π·Π° ΠΏΠΎΡΠ°ΠΊΠ°_ΡΠΈΠΏ, ΠΊΠΎΠ΅ ΠΌΠΎΠΆΠ΅ Π΄Π° Π·Π΅ΠΌΠ΅ ΡΠ°ΠΌΠΎ Π΄Π²Π΅ Π²ΡΠ΅Π΄Π½ΠΎΡΡΠΈ: 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