рдкрд░рд┐рдЪрдп
рдЕрд░реНрдХреЛ рдкреНрд░рдгрд╛рд▓реА рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджрд╛, рд╣рд╛рдореАрд▓реЗ рдзреЗрд░реИ рд╕рдВрдЦреНрдпрд╛рдорд╛ рд╡рд┐рднрд┐рдиреНрди рд▓рдЧрд╣рд░реВ рдкреНрд░рд╢реЛрдзрди рдЧрд░реНрдиреЗ рдЖрд╡рд╢реНрдпрдХрддрд╛рдХреЛ рд╕рд╛рдордирд╛ рдЧрд░реНрдпреМрдВред ELK рдЙрдкрдХрд░рдгрдХреЛ рд░реВрдкрдорд╛ рдЫрд╛рдирд┐рдПрдХреЛ рдерд┐рдпреЛред рдпрд╕ рд▓реЗрдЦрд▓реЗ рдпреЛ рд╕реНрдЯреНрдпрд╛рдХ рд╕реЗрдЯрдЕрдк рдЧрд░реНрдиреЗ рд╣рд╛рдореНрд░реЛ рдЕрдиреБрднрд╡рд▓рд╛рдИ рдЫрд▓рдлрд▓ рдЧрд░реНрдиреЗрдЫред
рд╣рд╛рдореА рдпрд╕рдХреЛ рд╕рдмреИ рдХреНрд╖рдорддрд╛рд╣рд░реВ рд╡рд░реНрдгрди рдЧрд░реНрди рд▓рдХреНрд╖реНрдп рд╕реЗрдЯ рдЧрд░реНрджреИрдиреМрдВ, рддрд░ рд╣рд╛рдореА рд╡рд┐рд╢реЗрд╖ рд░реВрдкрдорд╛ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд╕рдорд╕реНрдпрд╛рд╣рд░реВ рд╕рдорд╛рдзрд╛рди рдЧрд░реНрдирдорд╛ рдзреНрдпрд╛рди рдХреЗрдиреНрджреНрд░рд┐рдд рдЧрд░реНрди рдЪрд╛рд╣рдиреНрдЫреМрдВред рдпреЛ рддрдереНрдпрдХреЛ рдХрд╛рд░рдгрд▓реЗ рдЧрд░реНрджрд╛ рд╣реЛ рдХрд┐ рддреНрдпрд╣рд╛рдБ рдкрд░реНрдпрд╛рдкреНрдд рдорд╛рддреНрд░рд╛рдорд╛ рдХрд╛рдЧрдЬрд╛рддрд╣рд░реВ рд░ рддрдпрд╛рд░ рддрд╕реНрдмрд┐рд░рд╣рд░реВ рднрдП рддрд╛рдкрдирд┐, рддреНрдпрд╣рд╛рдБ рдзреЗрд░реИ рдХрдордЬреЛрд░реАрд╣рд░реВ рдЫрдиреН, рдХрдореНрддрд┐рдорд╛ рд╣рд╛рдореАрд▓реЗ рддрд┐рдиреАрд╣рд░реВрд▓рд╛рдИ рднреЗрдЯреНрдЯрд╛рдпреМрдВред
рд╣рд╛рдореАрд▓реЗ рдбрдХрд░-рдХрдореНрдкреЛрдЬ рдорд╛рд░реНрдлрдд рд╕реНрдЯреНрдпрд╛рдХ рддреИрдирд╛рдд рдЧрд░реНрдпреМрдВред рдпрд╕рдмрд╛рд╣реЗрдХ, рд╣рд╛рдореАрд╕рдБрдЧ рд░рд╛рдореНрд░реЛрд╕рдБрдЧ рд▓реЗрдЦрд┐рдПрдХреЛ docker-compose.yml рдерд┐рдпреЛ, рдЬрд╕рд▓реЗ рд╣рд╛рдореАрд▓рд╛рдИ рд╕рдорд╕реНрдпрд╛ рдмрд┐рдирд╛ рдиреИ рд╕реНрдЯреНрдпрд╛рдХ рдмрдврд╛рдЙрди рдЕрдиреБрдорддрд┐ рджрд┐рдпреЛред рд░ рдпреЛ рд╣рд╛рдореАрд▓рд╛рдИ рд▓рд╛рдЧреНрдереНрдпреЛ рдХрд┐ рд╡рд┐рдЬрдп рдкрд╣рд┐рд▓реЗ рдиреИ рдирдЬрд┐рдХ рдерд┐рдпреЛ, рдЕрдм рд╣рд╛рдореА рдпрд╕рд▓рд╛рдИ рд╣рд╛рдореНрд░реЛ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЕрдиреБрд░реВрдк рдЧрд░реНрди рдЕрд▓рд┐рдХрддрд┐ рдЯреНрд╡реАрдХ рдЧрд░реНрдиреЗрдЫреМрдВ рд░ рдпреЛ рд╣реЛред
рджреБрд░реНрднрд╛рдЧреНрдпрд╡рд╢, рд╣рд╛рдореНрд░реЛ рдЕрдиреБрдкреНрд░рдпреЛрдЧрдмрд╛рдЯ рд▓рдЧрд╣рд░реВ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрди рд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЧрд░реНрди рдкреНрд░рдгрд╛рд▓реА рдХрдиреНрдлрд┐рдЧрд░ рдЧрд░реНрдиреЗ рдкреНрд░рдпрд╛рд╕ рддреБрд░реБрдиреНрддреИ рд╕рдлрд▓ рднрдПрдиред рддреНрдпрд╕рдХрд╛рд░рдг, рд╣рд╛рдореАрд▓реЗ рдирд┐рд░реНрдгрдп рдЧрд░реНрдпреМрдВ рдХрд┐ рдпреЛ рдкреНрд░рддреНрдпреЗрдХ рдШрдЯрдХрд▓рд╛рдИ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЕрдзреНрдпрдпрди рдЧрд░реНрди рд▓рд╛рдпрдХ рдерд┐рдпреЛ, рд░ рддреНрдпрд╕рдкрдЫрд┐ рддрд┐рдиреАрд╣рд░реВрдХреЛ рдЬрдбрд╛рдирд╣рд░реВрдорд╛ рдлрд░реНрдХрдиреБрд╣реЛрд╕реНред
рддреНрдпрд╕реЛрднрдП, рд╣рд╛рдореАрд▓реЗ logstash рд╕рдВрдЧ рд╕реБрд░реБ рдЧрд░реНрдпреМрдВред
рд╡рд╛рддрд╛рд╡рд░рдг, рдкрд░рд┐рдирд┐рдпреЛрдЬрди, рдХрдиреНрдЯреЗрдирд░рдорд╛ Logstash рдЪрд▓рд╛рдЙрдБрджреИ
рдкрд░рд┐рдирд┐рдпреЛрдЬрдирдХреЛ рд▓рд╛рдЧрд┐ рд╣рд╛рдореА рдбрдХрд░-рдХрдореНрдкреЛрдЬ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдЫреМрдВ; рдпрд╣рд╛рдБ рд╡рд░реНрдгрди рдЧрд░рд┐рдПрдХрд╛ рдкреНрд░рдпреЛрдЧрд╣рд░реВ MacOS рд░ Ubuntu 18.0.4 рдорд╛ рдЧрд░рд┐рдПрдХреЛ рдерд┐рдпреЛред
рд╣рд╛рдореНрд░реЛ рдореВрд▓ docker-compose.yml рдорд╛ рджрд░реНрддрд╛ рдЧрд░рд┐рдПрдХреЛ logstash рдЫрд╡рд┐ рд╣реЛ docker.elastic.co/logstash/logstash:6.3.2
рд╣рд╛рдореА рдпрд╕рд▓рд╛рдИ рдкреНрд░рдпреЛрдЧрдХреЛ рд▓рд╛рдЧрд┐ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗрдЫреМрдВред
logstash рдЪрд▓рд╛рдЙрди рд╣рд╛рдореАрд▓реЗ рдЫреБрдЯреНрдЯреИ docker-compose.yml рд▓реЗрдЦреНрдпреМрдВред рдирд┐рд╕реНрд╕рдиреНрджреЗрд╣, рдХрдорд╛рдгреНрдб рд▓рд╛рдЗрдирдмрд╛рдЯ рдЫрд╡рд┐ рд╕реБрд░реБ рдЧрд░реНрди рд╕рдореНрднрд╡ рдерд┐рдпреЛ, рддрд░ рд╣рд╛рдореАрд▓реЗ рдПрдХ рд╡рд┐рд╢реЗрд╖ рд╕рдорд╕реНрдпрд╛ рд╕рдорд╛рдзрд╛рди рдЧрд░рд┐рд░рд╣реЗрдХрд╛ рдерд┐рдпреМрдВ, рдЬрд╣рд╛рдБ рд╣рд╛рдореА рдбрдХрд░-рдХрдореНрдкреЛрдЬрдмрд╛рдЯ рд╕рдмреИ рдЪрд▓рд╛рдЙрдБрдЫреМрдВред
рд╕рдВрдХреНрд╖реЗрдкрдорд╛ рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рди рдлрд╛рдЗрд▓рд╣рд░реВрдХреЛ рдмрд╛рд░реЗрдорд╛
рд╡рд░реНрдгрдирдмрд╛рдЯ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░, рд▓рдЧрд╕реНрдЯреНрдпрд╛рд╕ рдХрд┐ рдд рдПрдЙрдЯрд╛ рдЪреНрдпрд╛рдирд▓рдХреЛ рд▓рд╛рдЧрд┐ рдЪрд▓рд╛рдЙрди рд╕рдХрд┐рдиреНрдЫ, рдЬрд╕рдорд╛ рдпрд╕рд▓реЗ *.conf рдлрд╛рдЗрд▓ рдкрд╛рд╕ рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫ, рд╡рд╛ рдзреЗрд░реИ рдЪреНрдпрд╛рдирд▓рд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐, рдЬрд╕рдорд╛ рдпрд╕рд▓реЗ pipelines.yml рдлрд╛рдЗрд▓ рдкрд╛рд╕ рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫ, рдЬреБрди, рдмрд╛рд░реАрдорд╛ред , рдкреНрд░рддреНрдпреЗрдХ рдЪреНрдпрд╛рдирд▓рдХрд╛ рд▓рд╛рдЧрд┐ рдлрд╛рдЗрд▓рд╣рд░реВ .conf рдорд╛ рд▓рд┐рдЩреНрдХ рд╣реБрдиреЗрдЫред
рд╣рд╛рдореАрд▓реЗ рджреЛрд╕реНрд░реЛ рдмрд╛рдЯреЛ рд▓рд┐рдпреМрдВред рдпреЛ рд╣рд╛рдореАрд▓рд╛рдИ рдЕрдзрд┐рдХ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рд░ рд╕реНрдХреЗрд▓реЗрдмрд▓ рджреЗрдЦрд┐рдиреНрдереНрдпреЛред рддреНрдпрд╕рдХрд╛рд░рдг, рд╣рд╛рдореАрд▓реЗ pipelines.yml рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдпреМрдВ, рд░ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдбрд╛рдЗрд░реЗрдХреНрдЯрд░реА рдмрдирд╛рдпреМрдВ рдЬрд╕рдорд╛ рд╣рд╛рдореА рдкреНрд░рддреНрдпреЗрдХ рдЪреНрдпрд╛рдирд▓рдХреЛ рд▓рд╛рдЧрд┐ .conf рдлрд╛рдЗрд▓рд╣рд░реВ рд░рд╛рдЦреНрдиреЗрдЫреМрдВред
рдХрдиреНрдЯреЗрдирд░ рднрд┐рддреНрд░ рдЕрд░реНрдХреЛ рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рди рдлрд╛рдЗрд▓ рдЫ - 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_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 рдорд╛ рд╣реЛрдЗрдиред рдЕрдиреБрдЧрдорди рд╕реБрд╡рд┐рдзрд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди Elasticsearch рдорд╛ X-Pack рд╕реНрдерд╛рдкрдирд╛ рдЧрд░реНрдиреБрд╣реЛрд╕реНред рдЕрдиреНрдп рд╕реБрд╡рд┐рдзрд╛рд╣рд░реВ рдЙрдкрд▓рдмреНрдз рд╣реБрди рд╕рдХреНрдЫред
logstash_one_channel | [2019-04-29T11:29:00,526][INFO ][logstash.agent ] Logstash API endpoint {: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 рд▓реЗ рдорд╛рдиреНрджрдЫ рдХрд┐ рдпрд╕рд▓реЗ 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 | }
рдПрдЙрдЯреИ рдЪреНрдпрд╛рдирд▓ рднрд┐рддреНрд░ рдХрд╛рдо рдЧрд░реНрджреИ
рддреНрдпрд╕реИрд▓реЗ рд╣рд╛рдореАрд▓реЗ рд╕реБрд░реБ рдЧрд░реНрдпреМрдВред рдЕрдм рддрдкрд╛рдИ рд╡рд╛рд╕реНрддрд╡рдорд╛ рд▓рдЧрд╕реНрдЯреНрдпрд╛рд╕ рдХрдиреНрдлрд┐рдЧрд░ рдЧрд░реНрди рд╕рдордп рд▓рд┐рди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред рдЕрд╣рд┐рд▓реЗрдХреЛ рд▓рд╛рдЧрд┐ pipelines.yml рдлрд╛рдЗрд▓рд▓рд╛рдИ рдирдЫреЛрдФрдВ, рдПрдЙрдЯрд╛ рдЪреНрдпрд╛рдирд▓рд╕рдБрдЧ рдХрд╛рдо рдЧрд░реЗрд░ рдХреЗ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫ рд╣реЗрд░реМрдВред
рдореИрд▓реЗ рднрдиреНрдиреИ рдкрд░реНрдЫ рдХрд┐ рдЪреНрдпрд╛рдирд▓ рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рди рдлрд╛рдЗрд▓рд╕рдБрдЧ рдХрд╛рдо рдЧрд░реНрдиреЗ рд╕рд╛рдорд╛рдиреНрдп рд╕рд┐рджреНрдзрд╛рдиреНрддрд▓рд╛рдИ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдореНрдпрд╛рдиреБрдЕрд▓рдорд╛ рдпрд╣рд╛рдБ рд╡рд░реНрдгрди рдЧрд░рд┐рдПрдХреЛ рдЫ
рдпрджрд┐ рддрдкрд╛рдИрдВ рд░реВрд╕реАрдорд╛ рдкрдвреНрди рдЪрд╛рд╣рдиреБрд╣реБрдиреНрдЫ рднрдиреЗ, рд╣рд╛рдореАрд▓реЗ рдпреЛ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдпреМрдВ
рдЗрдирдкреБрдЯ рдЦрдгреНрдбрдмрд╛рдЯ рдХреНрд░рдорд╢рдГ рдЬрд╛рдФрдВред рд╣рд╛рдореАрд▓реЗ рдкрд╣рд┐рд▓реЗ рдиреИ TCP рдорд╛ рдХрд╛рдо рджреЗрдЦреЗрдХрд╛ рдЫреМрдВред рдпрд╣рд╛рдБ рдЕрд░реВ рдХреЗ рд░реЛрдЪрдХ рд╣реБрди рд╕рдХреНрдЫ?
рд╣реГрджрдпрдШрд╛рдд рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рд╕рдиреНрджреЗрд╢рд╣рд░реВ рдкрд░реАрдХреНрд╖рдг рдЧрд░реНрдиреБрд╣реЛрд╕реН
рддреНрдпрд╣рд╛рдБ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдкрд░реАрдХреНрд╖рдг рд╕рдиреНрджреЗрд╢рд╣рд░реВ рдЙрддреНрдкрдиреНрди рдЧрд░реНрди рдпрд╕реНрддреЛ рд░реЛрдЪрдХ рдЕрд╡рд╕рд░ рдЫред
рдпреЛ рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐, рддрдкрд╛рдИрдВрд▓реЗ рдЗрдирдкреБрдЯ рд╕реЗрдХреНрд╕рдирдорд╛ рд╣рд╛рд░реНрдЯрдмреАрди рдкреНрд▓рдЧрдЗрди рд╕рдХреНрд╖рдо рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫред
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 | }
рдпрджрд┐ рд╣рд╛рдореА рдзреЗрд░реИ рдкрдЯрдХ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрди рдЪрд╛рд╣рдиреНрдЫреМрдВ рднрдиреЗ, рд╣рд╛рдореАрд▓реЗ рдЕрдиреНрддрд░рд╛рд▓ рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░ рдердкреНрди рдЖрд╡рд╢реНрдпрдХ рдЫред
рдпрд╕рд░реА рд╣рд╛рдореА рдкреНрд░рддреНрдпреЗрдХ резреж рд╕реЗрдХреЗрдиреНрдбрдорд╛ рд╕рдиреНрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрдиреЗрдЫреМрдВред
input {
heartbeat {
message => "HeartBeat!"
interval => 10
}
}
рдлрд╛рдЗрд▓рдмрд╛рдЯ рдбрд╛рдЯрд╛ рдкреБрди: рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрджреИ
рд╣рд╛рдореАрд▓реЗ рдлрд╛рдЗрд▓ рдореЛрдб рд╣реЗрд░реНрдиреЗ рдирд┐рд░реНрдгрдп рдкрдирд┐ рдЧрд░реНрдпреМрдВред рдпрджрд┐ рдпрд╕рд▓реЗ рдлрд╛рдЗрд▓рд╕рдБрдЧ рд░рд╛рдореНрд░реЛрд╕рдБрдЧ рдХрд╛рдо рдЧрд░реНрдЫ рднрдиреЗ, рддреНрдпрд╕рдкрдЫрд┐ рд╕рд╛рдпрдж рдХреБрдиреИ рдПрдЬреЗрдиреНрдЯ рдЖрд╡рд╢реНрдпрдХ рдкрд░реНрджреИрди, рдХрдореНрддрд┐рдорд╛ рд╕реНрдерд╛рдиреАрдп рдкреНрд░рдпреЛрдЧрдХреЛ рд▓рд╛рдЧрд┐ред
рд╡рд┐рд╡рд░рдг рдЕрдиреБрд╕рд╛рд░, рдЕрдкрд░реЗрдЯрд┐рдЩ рдореЛрдб tail-f рдЬрд╕реНрддреИ рд╣реБрдиреБрдкрд░реНрдЫ, рдЕрд░реНрдерд╛рддреНред рдирдпрд╛рдБ рд▓рд╛рдЗрдирд╣рд░реВ рдкрдвреНрдЫ рд╡рд╛, рд╡рд┐рдХрд▓реНрдкрдХреЛ рд░реВрдкрдорд╛, рд╕рдореНрдкреВрд░реНрдг рдлрд╛рдЗрд▓ рдкрдвреНрдЫред
рддреНрдпрд╕реЛрднрдП рд╣рд╛рдореА рдХреЗ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрди рдЪрд╛рд╣рдиреНрдЫреМрдВ:
- рд╣рд╛рдореА рдПрдХ рд▓рдЧ рдлрд╛рдЗрд▓рдорд╛ рдЬреЛрдбрд┐рдПрдХрд╛ рд▓рд╛рдЗрдирд╣рд░реВ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрди рдЪрд╛рд╣рдиреНрдЫреМрдВред
- рд╣рд╛рдореА рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрди рдЪрд╛рд╣рдиреНрдЫреМрдВ рдЬреБрди рдзреЗрд░реИ рд▓рдЧ рдлрд╛рдЗрд▓рд╣рд░реВрдорд╛ рд▓реЗрдЦрд┐рдПрдХреЛ рдЫ, рдЬрд╣рд╛рдБрдмрд╛рдЯ рдкреНрд░рд╛рдкреНрдд рднрдПрдХреЛ рдЫреБрдЯреНрдпрд╛рдЙрди рд╕рдХреНрд╖рдо рд╣реБрдБрджрд╛ред
- рд╣рд╛рдореА рдпреЛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдЧрд░реНрди рдЪрд╛рд╣рдиреНрдЫреМрдВ рдХрд┐ рдЬрдм рд▓рдЧрд╕реНрдЯреНрдпрд╛рд╕ рдкреБрди: рд╕реБрд░реБ рд╣реБрдиреНрдЫ, рдпрд╕рд▓реЗ рдпреЛ рдбреЗрдЯрд╛ рдлреЗрд░рд┐ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрджреИрдиред
- рд╣рд╛рдореА рдЬрд╛рдБрдЪ рдЧрд░реНрди рдЪрд╛рд╣рдиреНрдЫреМрдВ рдХрд┐ рдпрджрд┐ рд▓рдЧрд╕реНрдЯреНрдпрд╛рд╕ рдмрдиреНрдж рдЧрд░рд┐рдПрдХреЛ рдЫ, рд░ рдбрд╛рдЯрд╛ рдлрд╛рдЗрд▓рд╣рд░реВрдорд╛ рд▓реЗрдЦрд┐рди рдЬрд╛рд░реА рдЫ, рддрдм рд╣рд╛рдореАрд▓реЗ рдпрд╕рд▓рд╛рдИ рдЪрд▓рд╛рдЙрдБрджрд╛, рд╣рд╛рдореАрд▓реЗ рдпреЛ рдбрд╛рдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрдиреЗрдЫреМрдВред
рдкреНрд░рдпреЛрдЧ рд╕рдЮреНрдЪрд╛рд▓рди рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐, рд╣рд╛рдореАрд▓реЗ рдлрд╛рдЗрд▓рд╣рд░реВ рд░рд╛рдЦреНрдиреЗ рдбрд╛рдЗрд░реЗрдХреНрдЯрд░реА рдЦреЛрд▓реЗрд░ 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 | }
рдорд╣рд╛рди! рдлрд╛рдЗрд▓ рдЙрдард╛рдЗрдПрдХреЛ рдерд┐рдпреЛ, рдмрд╛рдЯреЛ рд╕рд╣реА рд░реВрдкрдорд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЧрд░рд┐рдПрдХреЛ рдерд┐рдпреЛ, рд╕рдмреИ рдареАрдХ рдЫред
рд▓рдЧрд╕реНрдЯреНрдпрд╛рд╕ рд░реЛрдХреНрдиреБрд╣реЛрд╕реН рд░ рдлреЗрд░рд┐ рд╕реБрд░реБ рдЧрд░реНрдиреБрд╣реЛрд╕реНред рдкрд░реНрдЦреМрдВред рдореМрдиред рддреАред рд╣рд╛рдореАрд▓реЗ рдпреА рд░реЗрдХрд░реНрдбрд╣рд░реВ рдлреЗрд░рд┐ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрджреИрдиреМрдВред
рд░ рдЕрдм рд╕рдмреИрднрдиреНрджрд╛ рд╕рд╛рд╣рд╕реА рдкреНрд░рдпреЛрдЧред
рд▓рдЧрд╕реНрдЯреНрдпрд╛рд╕ рд╕реНрдерд╛рдкрдирд╛ рдЧрд░реНрдиреБрд╣реЛрд╕реН рд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЧрд░реНрдиреБрд╣реЛрд╕реН:
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), рддреНрдпрд╕рдкрдЫрд┐ рдХреЗрд╣рд┐ рдкрдирд┐ рдЙрдард╛рдЙрдиреЗ рдЫреИрдиред рдлрд╛рдЗрд▓рдХреЛ рд╕реНрдерд┐рддрд┐ рдЬрд╕рдорд╛ рдпреЛ рдкрдврд┐рдПрдХреЛ рдерд┐рдпреЛ рдХрдиреНрдЯреЗрдирд░ рднрд┐рддреНрд░ рднрдгреНрдбрд╛рд░ рдЧрд░рд┐рдПрдХреЛ рдерд┐рдпреЛред рдпрджрд┐ рддрдкрд╛рдИрдВрд▓реЗ рдпрд╕рд▓рд╛рдИ рд╕реНрдХреНрд░реНрдпрд╛рдЪрдмрд╛рдЯ рдЪрд▓рд╛рдЙрдиреБрднрдпреЛ рднрдиреЗ, рдпрд╕рд▓реЗ рдирдпрд╛рдБ рд▓рд╛рдЗрдирд╣рд░реВ рдорд╛рддреНрд░ рд╕реНрд╡реАрдХрд╛рд░ рдЧрд░реНрдиреЗрдЫред
рдЕрд╡рд╕реНрдерд┐рдд рдлрд╛рдЗрд▓рд╣рд░реВ рдкрдвреНрджреИ
рдорд╛рдиреМрдВ рдХрд┐ рд╣рд╛рдореА рдкрд╣рд┐рд▓реЛ рдкрдЯрдХ рд▓рдЧрд╕реНрдЯреНрдпрд╛рд╢ рд╕реБрд░реБ рдЧрд░реНрджреИрдЫреМрдВ, рддрд░ рд╣рд╛рдореАрд╕рдБрдЧ рдкрд╣рд┐рд▓реЗ рдиреИ рд▓рдЧрд╣рд░реВ рдЫрдиреН рд░ рд╣рд╛рдореА рддрд┐рдиреАрд╣рд░реВрд▓рд╛рдИ рдкреНрд░рд╢реЛрдзрди рдЧрд░реНрди рдЪрд╛рд╣рдиреНрдЫреМрдВред
рдпрджрд┐ рд╣рд╛рдореАрд▓реЗ рдорд╛рдерд┐ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрдХреЛ рдЗрдирдкреБрдЯ рдЦрдгреНрдбрдХреЛ рд╕рд╛рде рд▓рдЧрд╕реНрдЯреНрдпрд╛рд╕ рдЪрд▓рд╛рдпреМрдВ рднрдиреЗ, рд╣рд╛рдореАрд▓реЗ рдХреЗрд╣рд┐ рдкрдирд┐ рдкрд╛рдЙрдиреЗ рдЫреИрдиреМрдВред рд▓рдЧрд╕реНрдЯреНрдпрд╛рд╕рджреНрд╡рд╛рд░рд╛ рдорд╛рддреНрд░ рдирдпрд╛рдБ рд▓рд╛рдЗрдирд╣рд░реВ рдкреНрд░рд╢реЛрдзрди рдЧрд░рд┐рдиреЗрдЫред
рдЕрд╡рд╕реНрдерд┐рдд рдлрд╛рдЗрд▓рд╣рд░реВрдмрд╛рдЯ рд▓рд╛рдЗрдирд╣рд░реВ рддрд╛рдиреНрдирдХреЛ рд▓рд╛рдЧрд┐, рддрдкрд╛рдИрдВрд▓реЗ рдЗрдирдкреБрдЯ рд╕реЗрдХреНрд╕рдирдорд╛ рдердк рд▓рд╛рдЗрди рдердкреНрдиреБрдкрд░реНрдЫ:
input {
file {
start_position => "beginning"
path => "/usr/share/logstash/input/*.log"
}
}
рдпрд╕рдмрд╛рд╣реЗрдХ, рддреНрдпрд╣рд╛рдБ рдПрдХ рдЙрдкрджреНрд░рд╡ рдЫ: рдпрд╕рд▓реЗ рдирдпрд╛рдБ рдлрд╛рдЗрд▓рд╣рд░реВрд▓рд╛рдИ рдорд╛рддреНрд░ рдЕрд╕рд░ рдЧрд░реНрдЫ рдЬреБрди рд▓рдЧрд╕реНрдЯреНрдпрд╛рд╢рд▓реЗ рдЕрд╣рд┐рд▓реЗрд╕рдореНрдо рджреЗрдЦреЗрдХреЛ рдЫреИрдиред logstash рдХреЛ рджреГрд╢реНрдп рдХреЛ рдХреНрд╖реЗрддреНрд░ рдорд╛ рдкрд╣рд┐рд▓реЗ рдиреИ рдерд┐рдпреЛ рдХрд┐ рдЙрд╣реА рдлрд╛рдЗрд▓рд╣рд░реБ рдХреЛ рд▓рд╛рдЧреА, рдпреЛ рдкрд╣рд┐рд▓реЗ рдиреИ рдЖрдлреНрдиреЛ рдЖрдХрд╛рд░ рд╕рдореНрдЭрдирд╛ рдЫ рд░ рдЕрдм рддреА рдорд╛ рдирдпрд╛рдБ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рд╣рд░реВ рд▓рд┐рдиреЗрдЫред
рдпрд╣рд╛рдБ рд░реЛрдХреМрдВ рд░ рдЗрдирдкреБрдЯ рдЦрдгреНрдб рдЕрдзреНрдпрдпрди рдЧрд░реМрдВред рддреНрдпрд╣рд╛рдБ рдЕрдЭреИ рдзреЗрд░реИ рд╡рд┐рдХрд▓реНрдкрд╣рд░реВ рдЫрдиреН, рддрд░ рдЕрд╣рд┐рд▓реЗрдХреЛ рд▓рд╛рдЧрд┐ рдердк рдкреНрд░рдпреЛрдЧрд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рд╣рд╛рдореНрд░реЛ рд▓рд╛рдЧрд┐ рдкрд░реНрдпрд╛рдкреНрдд рдЫред
рд░рд╛рдЙрдЯрд┐рдВрдЧ рд░ рдбрд╛рдЯрд╛ рд░реВрдкрд╛рдиреНрддрд░рдг
рдирд┐рдореНрди рд╕рдорд╕реНрдпрд╛ рд╕рдорд╛рдзрд╛рди рдЧрд░реНрдиреЗ рдкреНрд░рдпрд╛рд╕ рдЧрд░реМрдВ, рдорд╛рдиреМрдВ рд╣рд╛рдореАрд╕рдБрдЧ рдПрдЙрдЯрд╛ рдЪреНрдпрд╛рдирд▓рдмрд╛рдЯ рд╕рдиреНрджреЗрд╢рд╣рд░реВ рдЫрдиреН, рддреАрдордзреНрдпреЗ рдХреЗрд╣реА рд╕реВрдЪрдирд╛рдореВрд▓рдХ рдЫрдиреН, рд░ рдХреЗрд╣реА рддреНрд░реБрдЯрд┐ рд╕рдиреНрджреЗрд╢рд╣рд░реВ рдЫрдиреНред рддрд┐рдиреАрд╣рд░реВ рдЯреНрдпрд╛рдЧ рджреНрд╡рд╛рд░рд╛ рднрд┐рдиреНрди рдЫрдиреНред рдХреЗрд╣реА INFO рд╣реБрдиреН, рдЕрд░реВ ERROR рд╣реБрдиреНред
рд╣рд╛рдореАрд▓реЗ рддрд┐рдиреАрд╣рд░реВрд▓рд╛рдИ рдмрд╛рд╣рд┐рд░ рдирд┐рд╕реНрдХрдиреБ рдкрд░реНрдЫред рддреАред рд╣рд╛рдореА рдПрдХ рдЪреНрдпрд╛рдирд▓рдорд╛ рд╕реВрдЪрдирд╛ рд╕рдиреНрджреЗрд╢рд╣рд░реВ рд▓реЗрдЦреНрдЫреМрдВ, рд░ рдЕрд░реНрдХреЛрдорд╛ рддреНрд░реБрдЯрд┐ рд╕рдиреНрджреЗрд╢рд╣рд░реВред
рдпреЛ рдЧрд░реНрдирдХрд╛ рд▓рд╛рдЧрд┐, рдЗрдирдкреБрдЯ рдЦрдгреНрдбрдмрд╛рдЯ рдлрд┐рд▓реНрдЯрд░ рд░ рдЖрдЙрдЯрдкреБрдЯрдорд╛ рд╕рд╛рд░реНрдиреБрд╣реЛрд╕реНред
рдлрд┐рд▓реНрдЯрд░ рдЦрдгреНрдб рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░, рд╣рд╛рдореА рдЖрдЧрдорди рд╕рдиреНрджреЗрд╢рд▓рд╛рдИ рдкрд╛рд░реНрд╕ рдЧрд░реНрдиреЗрдЫреМрдВ, рддреНрдпрд╕рдмрд╛рдЯ рд╣реНрдпрд╛рд╕ (рдХреБрдЮреНрдЬреА-рдорд╛рди рдЬреЛрдбреАрд╣рд░реВ) рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрджреИ, рдЬреБрди рд╣рд╛рдореАрд▓реЗ рдкрд╣рд┐рд▓реЗ рдиреИ рдХрд╛рдо рдЧрд░реНрди рд╕рдХреНрдЫреМрдВ, рдЕрд░реНрдерд╛рддреНред рд╕рд░реНрддрд╣рд░реВ рдЕрдиреБрд╕рд╛рд░ рдЕрд▓рдЧ рдЧрд░реНрдиреБрд╣реЛрд╕реНред рд░ рдЖрдЙрдЯрдкреБрдЯ рд╕реЗрдХреНрд╕рдирдорд╛, рд╣рд╛рдореА рд╕рдиреНрджреЗрд╢рд╣рд░реВ рдЪрдпрди рдЧрд░реНрдиреЗрдЫреМрдВ рд░ рдкреНрд░рддреНрдпреЗрдХрд▓рд╛рдИ рдЖрдлреНрдиреИ рдЪреНрдпрд╛рдирд▓рдорд╛ рдкрдард╛рдЙрдиреЗрдЫреМрдВред
grok рд╕рдБрдЧ рд╕рдиреНрджреЗрд╢ рдкрд╛рд░реНрд╕ рдЧрд░реНрджреИ
рдкрд╛рда рд╕реНрдЯреНрд░рд┐рдЩрд╣рд░реВ рдкрд╛рд░реНрд╕ рдЧрд░реНрди рд░ рддрд┐рдиреАрд╣рд░реВрдмрд╛рдЯ рдлрд┐рд▓реНрдбрд╣рд░реВрдХреЛ рд╕реЗрдЯ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрди, рдлрд┐рд▓реНрдЯрд░ рд╕реЗрдХреНрд╕рдирдорд╛ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдкреНрд▓рдЧрдЗрди рдЫ - grokред
рдпрд╣рд╛рдБ рдпрд╕рдХреЛ рд╡рд┐рд╕реНрддреГрдд рд╡рд┐рд╡рд░рдг рджрд┐рдиреЗ рд▓рдХреНрд╖реНрдп рдЖрдлреИрд▓рд╛рдИ рд╕реЗрдЯ рдирдЧрд░реАрдХрди (рдпрд╕рдХреЛ рд▓рд╛рдЧрд┐ рдо рд╕рдиреНрджрд░реНрдн рдЧрд░реНрджрдЫреБ
рдпреЛ рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐, рддрдкрд╛рдИрдВрд▓реЗ рдЗрдирдкреБрдЯ рд╕реНрдЯреНрд░рд┐рдЩрдХреЛ рдврд╛рдБрдЪрд╛рдорд╛ рдирд┐рд░реНрдгрдп рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫред рдорд╕рдБрдЧ рддрд┐рдиреАрд╣рд░реВ рдпрд╕ рдкреНрд░рдХрд╛рд░ рдЫрдиреН:
рез рдЬрд╛рдирдХрд╛рд░реА рд╕рдиреНрджреЗрд╢ рез
2 рддреНрд░реБрдЯрд┐ рд╕рдиреНрджреЗрд╢2
рддреАред рдкрд╣рд┐рдЪрд╛рдирдХрд░реНрддрд╛ рдкрд╣рд┐рд▓реЗ рдЖрдЙрдБрдЫ, рддреНрдпрд╕рдкрдЫрд┐ INFO/ERROR, рддреНрдпрд╕рдкрдЫрд┐ рдЦрд╛рд▓реА рдард╛рдЙрдБ рдмрд┐рдирд╛ рдХреЗрд╣реА рд╢рдмреНрджред
рдпреЛ рдЧрд╛рд╣реНрд░реЛ рдЫреИрди, рддрд░ рдпреЛ рд╕рдЮреНрдЪрд╛рд▓рди рдХреЛ рд╕рд┐рджреНрдзрд╛рдиреНрдд рдмреБрдЭреНрди рдкрд░реНрдпрд╛рдкреНрдд рдЫред
рддреНрдпрд╕реЛрднрдП, grok рдкреНрд▓рдЧрдЗрдирдХреЛ рдлрд┐рд▓реНрдЯрд░ рдЦрдгреНрдбрдорд╛, рд╣рд╛рдореАрд▓реЗ рд╣рд╛рдореНрд░реЛ рд╕реНрдЯреНрд░рд┐рдЩрд╣рд░реВ рдкрд╛рд░реНрд╕ рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐ рдврд╛рдБрдЪрд╛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдЧрд░реНрдиреБрдкрд░реНрдЫред
рдпреЛ рдпрд╕реНрддреЛ рджреЗрдЦрд┐рдиреЗрдЫ:
filter {
grok {
match => { "message" => ["%{INT:message_id} %{LOGLEVEL:message_type} %{WORD:message_text}"] }
}
}
рдореВрд▓рддрдГ рдпреЛ рдПрдХ рдирд┐рдпрдорд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рд╣реЛред INT, LOGLEVEL, WORD рдЬрд╕реНрддрд╛ рддрдпрд╛рд░ рдврд╛рдБрдЪрд╛рд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдиреНрдЫред рддрд┐рдиреАрд╣рд░реВрдХреЛ рд╡рд┐рд╡рд░рдг, рд╕рд╛рдереИ рдЕрдиреНрдп рдврд╛рдБрдЪрд╛рд╣рд░реВ рдпрд╣рд╛рдБ рдкрд╛рдЙрди рд╕рдХрд┐рдиреНрдЫ
рдЕрдм, рдпреЛ рдлрд┐рд▓реНрдЯрд░рдмрд╛рдЯ рдЧреБрдЬреНрд░реНрджрд╛, рд╣рд╛рдореНрд░реЛ рд╕реНрдЯреНрд░рд┐рдЩ рддреАрдирд╡рдЯрд╛ рдлрд┐рд▓реНрдбрд╣рд░реВрдХреЛ рд╣реНрдпрд╛рд╕рдорд╛ рдкрд░рд┐рдгрдд рд╣реБрдиреЗрдЫ: message_id, message_type, message_textред
рддрд┐рдиреАрд╣рд░реВ рдЖрдЙрдЯрдкреБрдЯ рд╕реЗрдХреНрд╕рдирдорд╛ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реБрдиреЗрдЫрдиреНред
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