ELK рдХреЛ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдЖрд╡реЗрджрдиред рд▓рдЧрд╕реНрдЯреНрдпрд╛рд╢ рд╕реЗрдЯ рдЕрдк рдЧрд░реНрджреИ

рдкрд░рд┐рдЪрдп

рдЕрд░реНрдХреЛ рдкреНрд░рдгрд╛рд▓реА рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджрд╛, рд╣рд╛рдореАрд▓реЗ рдзреЗрд░реИ рд╕рдВрдЦреНрдпрд╛рдорд╛ рд╡рд┐рднрд┐рдиреНрди рд▓рдЧрд╣рд░реВ рдкреНрд░рд╢реЛрдзрди рдЧрд░реНрдиреЗ рдЖрд╡рд╢реНрдпрдХрддрд╛рдХреЛ рд╕рд╛рдордирд╛ рдЧрд░реНрдпреМрдВред 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ред рд╣рд╛рдореА рдпрд╕рд▓рд╛рдИ рдЫреБрджреИрдиреМрдВ, рд╣рд╛рдореА рдпрд╕рд▓рд╛рдИ рдЬрд╕реНрддреИ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдЫреМрдВред

рддреНрдпрд╕реИрд▓реЗ, рд╣рд╛рдореНрд░реЛ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╕рдВрд░рдЪрдирд╛:

ELK рдХреЛ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдЖрд╡реЗрджрдиред рд▓рдЧрд╕реНрдЯреНрдпрд╛рд╢ рд╕реЗрдЯ рдЕрдк рдЧрд░реНрджреИ

рдЗрдирдкреБрдЯ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрди, рдЕрд╣рд┐рд▓реЗрдХреЛ рд▓рд╛рдЧрд┐ рд╣рд╛рдореА рдпреЛ рдкреЛрд░реНрдЯ 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

рд╣рд╛рдореА рдпрд╣рд╛рдБ рдХреЗ рджреЗрдЦреНрдЫреМрдВ?

  1. рд╕рдЮреНрдЬрд╛рд▓ рд░ рднреЛрд▓реНрдпреБрдорд╣рд░реВ рдореВрд▓ docker-compose.yml рдмрд╛рдЯ рд▓рд┐рдЗрдПрдХреЛ рдерд┐рдпреЛ (рдЬрд╣рд╛рдБ рд╕рдореНрдкреВрд░реНрдг рд╕реНрдЯреНрдпрд╛рдХ рд╕реБрд░реБ рдЧрд░рд┐рдПрдХреЛ рдЫ) рд░ рдорд▓рд╛рдИ рд▓рд╛рдЧреНрдЫ рдХрд┐ рддрд┐рдиреАрд╣рд░реВрд▓реЗ рдпрд╣рд╛рдБ рд╕рдордЧреНрд░ рдЪрд┐рддреНрд░рд▓рд╛рдИ рдзреЗрд░реИ рдЕрд╕рд░ рдЧрд░реНрджреИрдирдиреНред
  2. рд╣рд╛рдореА docker.elastic.co/logstash/logstash:6.3.2 рдЫрд╡рд┐рдмрд╛рдЯ рдПрдЙрдЯрд╛ рд▓рдЧрд╕реНрдЯреНрдпрд╛рд╢ рд╕реЗрд╡рд╛(рд╣рд░реВ) рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдЫреМрдВ рд░ рдпрд╕рд▓рд╛рдИ logstash_one_channel рдирд╛рдо рджрд┐рдиреНрдЫреМрдВред
  3. рд╣рд╛рдореА рдХрдиреНрдЯреЗрдирд░ рднрд┐рддреНрд░ рдкреЛрд░реНрдЯ 5046 рд▓рд╛рдИ рдЙрд╣реА рдЖрдиреНрддрд░рд┐рдХ рдкреЛрд░реНрдЯрдорд╛ рдлрд░реНрд╡рд╛рд░реНрдб рдЧрд░реНрдЫреМрдВред
  4. рд╣рд╛рдореАрд▓реЗ рд╣рд╛рдореНрд░реЛ рдкрд╛рдЗрдк рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рди рдлрд╛рдЗрд▓ ./config/pipelines.yml рд▓рд╛рдИ рдХрдиреНрдЯреЗрдирд░ рднрд┐рддреНрд░рдХреЛ рдлрд╛рдЗрд▓ /usr/share/logstash/config/pipelines.yml рдорд╛ рдирдХреНрд╕рд╛ рдЧрд░реНрдЫреМрдВ, рдЬрд╣рд╛рдБ logstash рд▓реЗ рдпрд╕рд▓рд╛рдИ рдЙрдард╛рдЙрдиреЗрдЫ рд░ рдпрд╕рд▓рд╛рдИ рдкрдвреНрдиреЗ рдорд╛рддреНрд░ рдмрдирд╛рдЙрдБрджрдЫ, рдХреЗрд╡рд▓ рдХреЗрд╕рдорд╛ред
  5. рд╣рд╛рдореАрд▓реЗ ./config/pipelines рдбрд╛рдЗрд░реЗрдХреНрдЯрд░реАрд▓рд╛рдИ рдирдХреНрд╕рд╛ рдЧрд░реНрдЫреМрдВ, рдЬрд╣рд╛рдБ рд╣рд╛рдореАрд╕рдБрдЧ рдЪреНрдпрд╛рдирд▓ рд╕реЗрдЯрд┐рдЩрд╣рд░реВ рднрдПрдХрд╛ рдлрд╛рдЗрд▓рд╣рд░реВ рдЫрдиреН, /usr/share/logstash/config/pipelines рдбрд╛рдЗрд░реЗрдХреНрдЯрд░реАрдорд╛ рд░ рдпрд╕рд▓рд╛рдИ рдкрдвреНрди рдорд╛рддреНрд░ рдорд┐рд▓реНрдЫред

ELK рдХреЛ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдЖрд╡реЗрджрдиред рд▓рдЧрд╕реНрдЯреНрдпрд╛рд╢ рд╕реЗрдЯ рдЕрдк рдЧрд░реНрджреИ

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

рд░ рд╣рд╛рдореА рдХрдиреНрдЯреЗрдирд░ рдХрдиреНрд╕реЛрд▓рдорд╛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рджреЗрдЦреНрдЫреМрдВ:

ELK рдХреЛ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдЖрд╡реЗрджрдиред рд▓рдЧрд╕реНрдЯреНрдпрд╛рд╢ рд╕реЗрдЯ рдЕрдк рдЧрд░реНрджреИ

рддрд░ рдПрдХреИ рд╕рдордпрдорд╛, рд╣рд╛рдореА рдкрдирд┐ рджреЗрдЦреНрдЫреМрдВ:

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=>"рдЗрд▓рд╛рд╕реНрдЯрд┐рдХрд╕реЗрд░реНрдЪ:9200/", :error_type=>LogStash::Outputs::ElasticSearch::HttpClient::Pool::HostUnreachableError, :error=>"Elasticsearch рдкрд╣реБрдБрдЪрдпреЛрдЧреНрдп рдЫреИрди: [http://elasticsearch:9200/][Manticore:]ResolutionFail elasticsearch"}
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=>"рдЗрд▓рд╛рд╕реНрдЯрд┐рдХрд╕реЗрд░реНрдЪ:9200/", :error_type=>LogStash::Outputs::ElasticSearch::HttpClient::Pool::HostUnreachableError, :error=>"Elasticsearch рдкрд╣реБрдБрдЪрдпреЛрдЧреНрдп рдЫреИрди: [http://elasticsearch:9200/][Manticore:]ResolutionFail elasticsearch"}

рд░ рд╣рд╛рдореНрд░реЛ рд▓рдЧ рдЬрд╣рд┐рд▓реЗ рдкрдирд┐ рдмрдврд┐рд░рд╣реЗрдХреЛ рдЫред

рдпрд╣рд╛рдБ рдореИрд▓реЗ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рд╕реБрд░реБ рднрдПрдХреЛ рд╕рдиреНрджреЗрд╢ рд╣рд░рд┐рдпреЛрдорд╛ рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдЧрд░реЗрдХреЛ рдЫреБ, рд░рд╛рддреЛрдорд╛ рддреНрд░реБрдЯрд┐ рд╕рдиреНрджреЗрд╢ рд░ рдкрд╣реЗрдВрд▓реЛрдорд╛ рд╕рдореНрдкрд░реНрдХ рдЧрд░реНрдиреЗ рдкреНрд░рдпрд╛рд╕рдХреЛ рд╕рдиреНрджреЗрд╢ред рдЗрд▓рд╛рд╕реНрдЯрд┐рдХрд╕реЗрд░реНрдЪ: 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 | }

рдПрдЙрдЯреИ рдЪреНрдпрд╛рдирд▓ рднрд┐рддреНрд░ рдХрд╛рдо рдЧрд░реНрджреИ

рддреНрдпрд╕реИрд▓реЗ рд╣рд╛рдореАрд▓реЗ рд╕реБрд░реБ рдЧрд░реНрдпреМрдВред рдЕрдм рддрдкрд╛рдИ рд╡рд╛рд╕реНрддрд╡рдорд╛ рд▓рдЧрд╕реНрдЯреНрдпрд╛рд╕ рдХрдиреНрдлрд┐рдЧрд░ рдЧрд░реНрди рд╕рдордп рд▓рд┐рди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред рдЕрд╣рд┐рд▓реЗрдХреЛ рд▓рд╛рдЧрд┐ 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 рдЬрд╕реНрддреИ рд╣реБрдиреБрдкрд░реНрдЫ, рдЕрд░реНрдерд╛рддреНред рдирдпрд╛рдБ рд▓рд╛рдЗрдирд╣рд░реВ рдкрдвреНрдЫ рд╡рд╛, рд╡рд┐рдХрд▓реНрдкрдХреЛ рд░реВрдкрдорд╛, рд╕рдореНрдкреВрд░реНрдг рдлрд╛рдЗрд▓ рдкрдвреНрдЫред

рддреНрдпрд╕реЛрднрдП рд╣рд╛рдореА рдХреЗ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрди рдЪрд╛рд╣рдиреНрдЫреМрдВ:

  1. рд╣рд╛рдореА рдПрдХ рд▓рдЧ рдлрд╛рдЗрд▓рдорд╛ рдЬреЛрдбрд┐рдПрдХрд╛ рд▓рд╛рдЗрдирд╣рд░реВ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрди рдЪрд╛рд╣рдиреНрдЫреМрдВред
  2. рд╣рд╛рдореА рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрди рдЪрд╛рд╣рдиреНрдЫреМрдВ рдЬреБрди рдзреЗрд░реИ рд▓рдЧ рдлрд╛рдЗрд▓рд╣рд░реВрдорд╛ рд▓реЗрдЦрд┐рдПрдХреЛ рдЫ, рдЬрд╣рд╛рдБрдмрд╛рдЯ рдкреНрд░рд╛рдкреНрдд рднрдПрдХреЛ рдЫреБрдЯреНрдпрд╛рдЙрди рд╕рдХреНрд╖рдо рд╣реБрдБрджрд╛ред
  3. рд╣рд╛рдореА рдпреЛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдЧрд░реНрди рдЪрд╛рд╣рдиреНрдЫреМрдВ рдХрд┐ рдЬрдм рд▓рдЧрд╕реНрдЯреНрдпрд╛рд╕ рдкреБрди: рд╕реБрд░реБ рд╣реБрдиреНрдЫ, рдпрд╕рд▓реЗ рдпреЛ рдбреЗрдЯрд╛ рдлреЗрд░рд┐ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрджреИрдиред
  4. рд╣рд╛рдореА рдЬрд╛рдБрдЪ рдЧрд░реНрди рдЪрд╛рд╣рдиреНрдЫреМрдВ рдХрд┐ рдпрджрд┐ рд▓рдЧрд╕реНрдЯреНрдпрд╛рд╕ рдмрдиреНрдж рдЧрд░рд┐рдПрдХреЛ рдЫ, рд░ рдбрд╛рдЯрд╛ рдлрд╛рдЗрд▓рд╣рд░реВрдорд╛ рд▓реЗрдЦрд┐рди рдЬрд╛рд░реА рдЫ, рддрдм рд╣рд╛рдореАрд▓реЗ рдпрд╕рд▓рд╛рдИ рдЪрд▓рд╛рдЙрдБрджрд╛, рд╣рд╛рдореАрд▓реЗ рдпреЛ рдбрд╛рдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрдиреЗрдЫреМрдВред

рдкреНрд░рдпреЛрдЧ рд╕рдЮреНрдЪрд╛рд▓рди рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐, рд╣рд╛рдореАрд▓реЗ рдлрд╛рдЗрд▓рд╣рд░реВ рд░рд╛рдЦреНрдиреЗ рдбрд╛рдЗрд░реЗрдХреНрдЯрд░реА рдЦреЛрд▓реЗрд░ 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

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдердкреНрди