рдкрд░рд┐рдЪрдп
рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рд▓реЙрдЧ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рд╕рд╛рде рдЕрдЧрд▓реА рдкреНрд░рдгрд╛рд▓реА рдХреЛ рддреИрдирд╛рдд рдХрд░рдирд╛ред рдЙрдкрдХрд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдИрдПрд▓рдХреЗ рдЪреБрдирд╛ред рдпрд╣ рд▓реЗрдЦ рдЗрд╕ рд╕реНрдЯреИрдХ рдХреЛ рдЯреНрдпреВрди рдХрд░рдиреЗ рдХреЗ рд╕рд╛рде рд╣рдорд╛рд░реЗ рдЕрдиреБрднрд╡ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░реЗрдЧрд╛ред
рд╣рдо рдЗрд╕рдХреА рд╕рднреА рд╕рдВрднрд╛рд╡рдирд╛рдУрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд▓рдХреНрд╖реНрдп рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╣рдо рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдпрд╣ рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдкрд░реНрдпрд╛рдкреНрдд рдорд╛рддреНрд░рд╛ рдореЗрдВ рдкреНрд░рд▓реЗрдЦрди рдФрд░ рддреИрдпрд╛рд░ рдЪрд┐рддреНрд░реЛрдВ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдмрд╣реБрдд рдЕрдзрд┐рдХ рдиреБрдХрд╕рд╛рди рд╣реИрдВ, рдХрдо рд╕реЗ рдХрдо рд╣рдордиреЗ рдЙрдиреНрд╣реЗрдВ рдкрд╛рдпрд╛ред
рд╣рдордиреЗ рдбреЙрдХ-рдХрдВрдкреЛрдЬрд╝ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реНрдЯреИрдХ рдХреЛ рддреИрдирд╛рдд рдХрд┐рдпрд╛ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд▓рд┐рдЦрд┐рдд docker-compose.yml рдерд╛, рдЬрд┐рд╕рдиреЗ рд╣рдореЗрдВ рд▓рдЧрднрдЧ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реЛрдиреЗ рдХреЗ рд╕рд╛рде рдвреЗрд░ рдЙрдард╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреАред рдФрд░ рд╣рдореЗрдВ рдпрд╣ рд▓рдЧрдиреЗ рд▓рдЧрд╛ рдХрд┐ рдЬреАрдд рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдирд┐рдХрдЯ рд╣реИ, рдЕрдм рд╣рдо рдЕрдкрдиреА рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдФрд░ рдЗрд╕реЗ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдереЛрдбрд╝рд╛ рдореЛрдбрд╝ рд▓реЗрдВрдЧреЗред
рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рд╕реЗ рд▓реЙрдЧ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдФрд░ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд┐рд╕реНрдЯрдо рдХреЛ рдЯреНрдпреВрди рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рд╕рдлрд▓рддрд╛ рдХреЗ рд╕рд╛рде рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЗрд╕рд▓рд┐рдП, рд╣рдордиреЗ рддрдп рдХрд┐рдпрд╛ рдХрд┐ рдпрд╣ рдкреНрд░рддреНрдпреЗрдХ рдШрдЯрдХ рдХреЛ рдЕрд▓рдЧ рд╕реЗ рджреЗрдЦрдиреЗ рд▓рд╛рдпрдХ рд╣реИ, рдФрд░ рдлрд┐рд░ рдЙрдирдХреЗ рд░рд┐рд╢реНрддреЛрдВ рдкрд░ рд╡рд╛рдкрд╕ рд▓реМрдЯреЗрдВред
рдЗрд╕рд▓рд┐рдП, рд╣рдордиреЗ рд▓реЙрдЧрд╕реНрдЯреИрд╢ рдХреЗ рд╕рд╛рде рд╢реБрд░реБрдЖрдд рдХреАред
рдкрд░реНрдпрд╛рд╡рд░рдг, рдкрд░рд┐рдирд┐рдпреЛрдЬрди, рдХрдВрдЯреЗрдирд░ рдореЗрдВ рд▓реЙрдЧрд╕реНрдЯреИрд╢ рд▓реЙрдиреНрдЪ рдХрд░реЗрдВ
рддреИрдирд╛рддреА рдХреЗ рд▓рд┐рдП рд╣рдо docker-compose рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдпрд╣рд╛рдБ рд╡рд░реНрдгрд┐рдд рдкреНрд░рдпреЛрдЧ MacOS рдФрд░ Ubuntu 18.0.4 рдкрд░ рдХрд┐рдП рдЧрдП рдереЗред
рд▓реЙрдЧрд╕реНрдЯреИрд╢ рдЫрд╡рд┐ рдЬреЛ рд╣рдорд╛рд░реЗ рд╕рд╛рде рдореВрд▓ docker-compose.yml рдореЗрдВ рдкрдВрдЬреАрдХреГрдд рдереА docker.elastic.co/logstash/logstash:6.3.2 рд╣реИ
рд╣рдо рдЗрд╕рдХрд╛ рдкреНрд░рдпреЛрдЧ рдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд░реЗрдВрдЧреЗред
рд▓реЙрдЧрд╕реНрдЯреИрд╢ рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдордиреЗ рдПрдХ рдЕрд▓рдЧ рдбреЙрдХрдЯрд░-рдХрдВрдкреЛрдЬрд╝ рд▓рд┐рдЦрд╛ рд╣реИред рдмреЗрд╢рдХ, рдЫрд╡рд┐ рдХреЛ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рд╕реЗ рд▓реЙрдиреНрдЪ рдХрд░рдирд╛ рд╕рдВрднрд╡ рдерд╛, рд▓реЗрдХрд┐рди рд╣рдордиреЗ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрд╛рд░реНрдп рдХреЛ рд╣рд▓ рдХрд┐рдпрд╛, рдЬрд╣рд╛рдВ рдбреЙрдХрдЯрд░-рдХрдВрдкреЛрдЬ рд╕реЗ рд╕рдм рдХреБрдЫ рд╢реБрд░реВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ
рд╡рд┐рд╡рд░рдг рдХреЗ рдЕрдиреБрд╕рд╛рд░, рд▓реЙрдЧрд╕реНрдЯреИрд╢ рджреЛрдиреЛрдВ рдХреЛ рдПрдХ рдЪреИрдирд▓ рдХреЗ рд▓рд┐рдП рдЪрд▓рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЗрд╕реЗ * .conf рдлрд╝рд╛рдЗрд▓ рдпрд╛ рдХрдИ рдЪреИрдирд▓реЛрдВ рдХреЗ рд▓рд┐рдП рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдЗрд╕реЗ рдкрд╛рдЗрдкрд▓рд╛рдЗрдиреЛрдВ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдлрд╝рд╛рдЗрд▓, рдЬреЛ рдмрджрд▓реЗ рдореЗрдВ, рдлрд╝рд╛рдЗрд▓реЛрдВ рд╕реЗ рд▓рд┐рдВрдХ рд╣реЛрдЧреАред рдкреНрд░рддреНрдпреЗрдХ рдЪреИрдирд▓ рдХреЗ рд▓рд┐рдП .confред
рд╣рдо рджреВрд╕рд░реЗ рд░рд╛рд╕реНрддреЗ рд╕реЗ рдЧрдПред рдпрд╣ рд╣рдореЗрдВ рдЕрдзрд┐рдХ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рдФрд░ рд╕реНрдХреЗрд▓реЗрдмрд▓ рд▓рдЧ рд░рд╣рд╛ рдерд╛ред рдЗрд╕рд▓рд┐рдП, рд╣рдордиреЗ рдкрд╛рдЗрдкрд▓рд╛рдЗрди.рдЖрдИрдПрдордПрд▓ рдмрдирд╛рдпрд╛, рдФрд░ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдмрдирд╛рдИ рдЬрд┐рд╕рдореЗрдВ рд╣рдо рдкреНрд░рддреНрдпреЗрдХ рдЪреИрдирд▓ рдХреЗ рд▓рд┐рдП .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 рдореЗрдВ рдореИрдк рдХрд░рддреЗ рд╣реИрдВ, рдЬрд╣рд╛рдВ рд▓реЙрдЧрд╕реНрдЯреИрд╢ рдЗрд╕реЗ рдЙрдард╛рдПрдЧрд╛ рдФрд░ рдХреЗрд╡рд▓ рдХреЗрд╕ рдореЗрдВ рд╣реА рд░реАрдб-рдУрдирд▓реА рдмрдирд╛ рджреЗрдЧрд╛ред
- рд╣рдо ./config/pipelines рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдЬрд╣рд╛рдВ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ / usr / share / logstash / config / рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдЪреИрдирд▓ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдлрд╝рд╛рдЗрд▓реЗрдВ рд╣реИрдВ, рдФрд░ рдЗрд╕реЗ рдХреЗрд╡рд▓ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рднреА рдмрдирд╛рддреЗ рд╣реИрдВред

рдкрд╛рдЗрдкрд▓рд╛рдЗрдиред рдлрд╝рд╛рдЗрд▓
- pipeline.id: HABR pipeline.workers: 1 pipeline.batch.size: 1 path.config: "./config/pipelines/habr_pipeline.conf"
рдпрд╣рд╛рдВ, рдПрдЪрдПрдмреАрдЖрд░ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдХреЗ рд╕рд╛рде рдПрдХ рдЪреИрдирд▓ рдФрд░ рдЗрд╕рдХреА рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдкрде рд╡рд░реНрдгрд┐рдд рд╣реИред
рдФрд░ рдЕрдВрдд рдореЗрдВ рдлрд╛рдЗрд▓ "./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.licctoreader] рд▓рд╛рдЗрд╕реЗрдВрд╕ рд╕рд░реНрд╡рд░ рд╕реЗ рд▓рд╛рдЗрд╕реЗрдВрд╕ рдХреА рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдореЗрдВ рдЕрд╕рдорд░реНрде {: рд╕рдВрджреЗрд╢ => "рдПрд▓рд┐рдпрд╕реНрдЯрд┐рдХреНрд╕ рдЦреЛрдЬ рдЕрдиреБрдкрд▓рдмреНрдз: [http: // elasticsearch: 9200 /] [Manticore :: рд░рд┐рдЬрд╝реЙрд▓реНрдпреВрд╢рди рдлреЗрд▓рд┐рдпрд░] рдЗрд▓рд╛рд╕реНрдЯрд┐рдХреНрд╕рд░реНрдЪ ", ...
logstash_one_channel | [2019-04-29T11: 28: 59,894] [INFO] [logstash.pipeline]
рдкрд╛рдЗрдкрд▓рд╛рдЗрди рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рд╢реБрд░реВ рд╣реБрдИ {: рдкрд╛рдЗрдкрд▓рд╛рдЗрди_рдЖрдИрдбреА => "ред рдореЙрдирд┐рдЯрд░рд┐рдВрдЧ-рд▓реЙрдЧрд╕реНрдЯреИрд╢",: рдзрд╛рдЧрд╛ => "# <рдереНрд░реЗрдб: 0x119abb86 рд░рди>"}}ред
logstash_one_channel | [2019-04-29T11: 28: 59,988] [INFO] [logstash.agent] рдкрд╛рдЗрдкрд▓рд╛рдЗрдиреЗрдВ рдЪрд▓ рд░рд╣реА рд╣реИрдВ {: count => 2 ,: рдЪрд▓ рд░рд╣реА_рдкрд┐рдкреНрд▓реАрди => [: HABR ,: "ред рдореЙрдирд┐рдЯрд░рд┐рдВрдЧ-рд▓реЙрдЧрд╢реИрд╢"],: non_running_pipelines => []ред ]}
logstash_one_channel | [2019-04-29T11: 29: 00,015]
[ERROR] [logstash.inputs.metrics] X- рдкреИрдХ рд▓реЙрдЧрд╕реНрдЯреИрд╢ рдкрд░ рд╕реНрдерд╛рдкрд┐рдд рд╣реИ, рд▓реЗрдХрд┐рди рдПрд▓рд┐рд╕реНрдЯрд┐рдХреНрд╕ рдЦреЛрдЬ рдкрд░ рдирд╣реАрдВред рдореЙрдирд┐рдЯрд░рд┐рдВрдЧ рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреГрдкрдпрд╛ Elasticsearch рдкрд░ X-Pack рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВред рдЕрдиреНрдп рд╕реБрд╡рд┐рдзрд╛рдПрдБ рдЙрдкрд▓рдмреНрдз рд╣реЛ рд╕рдХрддреА рд╣реИрдВредlogstash_one_channel | [2019-04-29T11: 29: 00,526] [INFO] [logstash.agent] рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рд▓реЙрдЧрд╕реНрдЯреИрд╢ API рд╕рдорд╛рдкрди рдмрд┐рдВрджреБ {: рдкреЛрд░реНрдЯ => 9600} рд╢реБрд░реВ рдХрд┐рдпрд╛
logstash_one_channel | [2019-04-29T11: 29: 04,478] [INFO] [logstash.outputs.elasticsearch] рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рд╛рд╕реНрдереНрдп рдЬрд╛рдВрдЪ рдЪрд▓ рд░рд╣реА рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдХреЛрдИ рдЗрд▓рд╛рд╕реНрдЯрд┐рдХреНрд╕ рдЦреЛрдЬ рдХрдиреЗрдХреНрд╢рди рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ {: healthcheck_url => http: elasticsearch: 9200 / ,: path => "/"}
l
ogstash_one_channel | [2019-04-29T11: 29: 04,487]
[WARN] [logstash.outputs.elasticsearch] рдореГрдд рдИрдПрд╕ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рдВрдмрдВрдз рдХреЛ рдлрд┐рд░ рд╕реЗ рдЬреАрд╡рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ рдЧрдпрд╛, рд▓реЗрдХрд┐рди рдПрдХ рддреНрд░реБрдЯрд┐ рдорд┐рд▓реАред {= url => " elasticsearch : 9200 /", error_type => LogStash :: рдЖрдЙрдЯрдкреБрдЯ :: ElasticSearch :: HttpClient :: Pool :: HostUnreachableError ,: error => Elasticsearch рдЦреЛрдЬ рдпреЛрдЧреНрдп: [http: // elasticsearch: 9200/9 ] [рдордЯрд┐рдпреЛрд░ :: рд░реЗрдЬрд╝реЛрд▓реНрдпреВрд╢рди рдлреЗрд▓реНрдпреЛрд░] рдЗрд▓рд╛рд╕реНрдЯрд┐рд╕рд░реНрдЪ "}logstash_one_channel | [2019-04-29TT11: 29: 04,704] [INFO] [logstash.licensechecker.licraneeader] рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рд╛рд╕реНрдереНрдп рдЬрд╛рдВрдЪ рдЪрд▓ рд░рд╣реА рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдХреЛрдИ рдЗрд▓рд╛рд╕реНрдЯрд┐рдХреНрд╕ рдЦреЛрдЬ рдХрдиреЗрдХреНрд╢рди рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ {: healthcheck_url>> http: // elasticsearch: 9200 / :: path => "/"}
logstash_one_channel | [2019-04-29T11: 29: 04,710]
[WARN] [logstash.licensechecker.licraneeader] рдореГрдд рдИрдПрд╕ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рдВрдмрдВрдз рдХреЛ рдлрд┐рд░ рд╕реЗ рдЬреАрд╡рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ рдЧрдпрд╛, рд▓реЗрдХрд┐рди рдПрдХ рддреНрд░реБрдЯрд┐ рдорд┐рд▓реАред {= url => " elasticsearch : 9200 /", error_type => LogStash :: рдЖрдЙрдЯрдкреБрдЯ :: ElasticSearch :: HttpClient :: Pool :: HostUnreachableError ,: error => Elasticsearch рдЦреЛрдЬ рдпреЛрдЧреНрдп: [http: // elasticsearch: 9200/9 ] [рдордЯрд┐рдпреЛрд░ :: рд░реЗрдЬрд╝реЛрд▓реНрдпреВрд╢рди рдлреЗрд▓реНрдпреЛрд░] рдЗрд▓рд╛рд╕реНрдЯрд┐рд╕рд░реНрдЪ "}рдФрд░ рд╣рдорд╛рд░рд╛ рд▓реЙрдЧ рд╣рд░ рд╕рдордп рд░реЗрдВрдЧрддрд╛ рд░рд╣рддрд╛ рд╣реИред
рдпрд╣рд╛рдВ рдореИрдВрдиреЗ рд╣рд░реЗ рд░рдВрдЧ рдХреЗ рд╕рдВрджреЗрд╢ рдкрд░ рдкреНрд░рдХрд╛рд╢ рдбрд╛рд▓рд╛ рдХрд┐ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рд╢реБрд░реВ рд╣реБрдИ, рд▓рд╛рд▓ - рдПрдХ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдФрд░ рдкреАрд▓рд╛ - рдПрдХ
рддрд╕реНрд╡реАрд░ рдЬреЛ рдорд╛рдпрд╛рд╡реА рдЦреЛрдЬ рд╕реЗ рд╕рдВрдкрд░реНрдХ рдХрд░рдиреЗ рдХреЗ рдкреНрд░рдпрд╛рд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИ: 9200ред
рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реЛрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЫрд╡рд┐ рдореЗрдВ рд╢рд╛рдорд┐рд▓ logstash.conf рдХреЗ рдкрд╛рд╕ рдЗрд▓рд╛рд╕реНрдЯрд┐рдХреНрд╕ рдЦреЛрдЬ рдЙрдкрд▓рдмреНрдзрддрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдЪреЗрдХ рд╣реЛрддрд╛ рд╣реИред рд╕рдм рдХреЗ рдмрд╛рдж, рд▓реЙрдЧрд╕реНрдЯреИрд╢ рдорд╛рдирддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрд▓реНрдХ рд╕реНрдЯреИрдХ рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдФрд░ рд╣рдордиреЗ рдЗрд╕реЗ рдЕрд▓рдЧ рдХрд░ рджрд┐рдпрд╛ред
рдЖрдк рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдирд╣реАрдВред
рд╕рдорд╛рдзрд╛рди рдЗрд╕ рдЪреЗрдХ рдХреЛ 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 | }
рдПрдХ рдЪреИрдирд▓ рдХреЗ рднреАрддрд░ рдХрд╛рдо рдХрд░реЗрдВ
рддреЛ, рд╣рдордиреЗ рд╢реБрд░реБрдЖрдд рдХреАред рдЕрдм рдЖрдк рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд▓реЙрдЧрд╕реНрдЯреИрд╢ рдХреЛ рд╕реАрдзреЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордп рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВред рд╣рдо рдЕрднреА рдХреЗ рд▓рд┐рдП рдкрд╛рдЗрдкрд▓рд╛рдЗрдиреЛрдВ рдХреЛ рд╕реНрдкрд░реНрд╢ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗред рд╣рдо рдПрдХ рдЪреИрдирд▓ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдХреЗ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред
рдореБрдЭреЗ рдХрд╣рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдЪреИрдирд▓ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рд╕рд╛рдорд╛рдиреНрдп рд╕рд┐рджреНрдзрд╛рдВрдд рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдЧрд╛рдЗрдб рдореЗрдВ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╡рд░реНрдгрд┐рдд рд╣реИ,
рдпрд╣рд╛рдВрдпрджрд┐ рдЖрдк рд░реВрд╕реА рдореЗрдВ рдкрдврд╝рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рд╣рдордиреЗ
рдпрд╣рд╛рдВ рдЗрд╕
рд▓реЗрдЦ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ (рд▓реЗрдХрд┐рди рдХреНрд╡реЗрд░реА рд╕рд┐рдВрдЯреИрдХреНрд╕ рдкреБрд░рд╛рдирд╛ рд╣реИ, рд╣рдореЗрдВ рдЗрд╕реЗ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП)ред
рдЪрд▓реЛ рдЗрдирдкреБрдЯ рд╕реЗрдХреНрд╢рди рд╕реЗ рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рдЪрд▓рддреЗ рд╣реИрдВред рд╣рдордиреЗ рдкрд╣рд▓реЗ рд╣реА 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 | }
рд╣рдо рдЕрдзрд┐рдХ рдмрд╛рд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рд╣рдореЗрдВ рдЕрдВрддрд░рд╛рд▓ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдЗрд╕ рддрд░рд╣ рд╣рдо рд╣рд░ 10 рд╕реЗрдХрдВрдб рдореЗрдВ рдПрдХ рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВрдЧреЗред
input { heartbeat { message => "HeartBeat!" interval => 10 } }
рдХрд┐рд╕реА рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдбреЗрдЯрд╛ рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛
рд╣рдордиреЗ рдлрд╝рд╛рдЗрд▓ рдореЛрдб рджреЗрдЦрдиреЗ рдХрд╛ рднреА рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ред рдпрджрд┐ рдпрд╣ рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╕рд╛рде рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рдХрд┐рд╕реА рднреА рдПрдЬреЗрдВрдЯ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрдЧреА, рдареАрдХ рд╣реИ, рдХрдо рд╕реЗ рдХрдо рд╕реНрдерд╛рдиреАрдп рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдПред
рд╡рд┐рд╡рд░рдг рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдСрдкрд░реЗрдЯрд┐рдВрдЧ рдореЛрдб рдкреВрдВрдЫ-рдПрдл рдХреЗ рд╕рдорд╛рди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЕрд░реНрдерд╛рддред рдирдИ рд▓рд╛рдЗрдиреЛрдВ рдХреЛ рдкрдврд╝рддрд╛ рд╣реИ рдпрд╛, рдПрдХ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд░реВрдк рдореЗрдВ, рдкреВрд░реА рдлрд╛рдЗрд▓ рдХреЛ рдкрдврд╝рддрд╛ рд╣реИред
рддреЛ рд╣рдо рдХреНрдпрд╛ рдкрд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ:
- рд╣рдо рдЙрди рд▓рд╛рдЗрдиреЛрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЬреЛ рдПрдХ рд▓реЙрдЧ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕рдВрд▓рдЧреНрди рд╣реИрдВред
- рд╣рдо рд╡рд╣ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЬреЛ рдХрдИ рд▓реЙрдЧ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ, рдЬрдмрдХрд┐ рдЬреЛ рдХреБрдЫ рднреА рдЖрдпрд╛ рдЙрд╕реЗ рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИред
- рд╣рдо рдпрд╣ рдЬрд╛рдВрдЪрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рд▓реЙрдЧрд╕реНрдЯреИрд╢ рдХреЛ рдкреБрдирд░рд╛рд░рдВрдн рдХрд░рдиреЗ рдкрд░ рдпрд╣ рдбреЗрдЯрд╛ рдлрд┐рд░ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред
- рд╣рдо рдпрд╣ рдЬрд╛рдВрдЪрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдпрджрд┐ рд▓реЙрдЧрд╕реНрдЯреИрд╢ рдЕрдХреНрд╖рдо рд╣реИ, рдФрд░ рдбреЗрдЯрд╛ рдлрд╝рд╛рдЗрд▓реЛрдВ рдкрд░ рд▓рд┐рдЦрд╛ рдЬрд╛рдирд╛ рдЬрд╛рд░реА рд╣реИ, рддреЛ рдЬрдм рд╣рдо рдЗрд╕реЗ рдЪрд▓рд╛рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдпрд╣ рдбреЗрдЯрд╛ рдорд┐рд▓реЗрдЧрд╛ред
рдкреНрд░рдпреЛрдЧ рдХрд╛ рд╕рдВрдЪрд╛рд▓рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, 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 рдбрд╛рд▓рддреЗ рд╣реИрдВ рдФрд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╣реИрдВ:
echo '3' >> logs/number2.log echo '4' >> logs/number1.log
рд▓реЙрдЧрд╕реНрдЯреИрд╢ рдХреЛ рдлрд┐рд░ рд╕реЗ рдЪрд▓рд╛рдПрдБ рдФрд░ рджреЗрдЦреЗрдВ:
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 | }
рд╣реБрд░реНрд░реЗ! рд╕рдм рдХреБрдЫ рдЙрдард╛ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рд▓реЗрдХрд┐рди, рд╣рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪреЗрддрд╛рд╡рдиреА рджреЗрдиреА рдЪрд╛рд╣рд┐рдПред рдпрджрд┐ рд▓реЙрдЧрд╕реНрдЯреИрд╢ рд╡рд╛рд▓рд╛ рдХрдВрдЯреЗрдирд░ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ (docker stop logstash_one_channel && docker rm logstash_one_channel), рддреЛ рдХреБрдЫ рднреА рдирд╣реАрдВ рдЙрдард╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдХрдВрдЯреЗрдирд░ рдХреЗ рдЕрдВрджрд░, рдЬрд┐рд╕ рдлрд╝рд╛рдЗрд▓ рд╕реНрдерд┐рддрд┐ рдХреЛ рдкрдврд╝рд╛ рдЧрдпрд╛ рдерд╛, рд╡рд╣ рд╕рд╣реЗрдЬ рд▓реА рдЧрдИ рдереАред рдпрджрд┐ рдЦрд░реЛрдВрдЪ рд╕реЗ рдЪрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдХреЗрд╡рд▓ рдирдИ рд▓рд╛рдЗрдиреЛрдВ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░реЗрдЧрд╛ред
рдореМрдЬреВрджрд╛ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдкрдврд╝реЗрдВ
рдорд╛рдирд╛ рдХрд┐ рд╣рдо рдкрд╣рд▓реА рдмрд╛рд░ рд▓реЙрдЧрд╕реНрдЯреИрд╢ рдЪрд▓рд╛рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд▓реЙрдЧ рд╣реИрдВ рдФрд░ рд╣рдо рдЙрдиреНрд╣реЗрдВ рдкреНрд░реЛрд╕реЗрд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред
рдпрджрд┐ рд╣рдо рдЙрдкрд░реНрдпреБрдХреНрдд рдЗрдирдкреБрдЯ рдЕрдиреБрднрд╛рдЧ рдХреЗ рд╕рд╛рде рд▓реЙрдЧрд╕реНрдЯреИрд╢ рдЪрд▓рд╛рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдХреБрдЫ рднреА рдирд╣реАрдВ рдорд┐рд▓реЗрдЧрд╛ред рд▓реЙрдЧрд╕реНрдЯреИрд╢ рджреНрд╡рд╛рд░рд╛ рдХреЗрд╡рд▓ рдирдИ рд╕реВрдЪрд┐рдпреЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдореМрдЬреВрджрд╛ рдлрд╝рд╛рдЗрд▓реЛрдВ рд╕реЗ рд▓рд╛рдЗрдиреЗрдВ рдЦреАрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрдирдкреБрдЯ рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рд░реЗрдЦрд╛ рдЬреЛрдбрд╝реЗрдВ:
input { file { start_position => "beginning" path => "/usr/share/logstash/input/*.log" } }
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдПрдХ рдЕрддрд┐ рд╕реВрдХреНрд╖реНрдо рдЕрдВрддрд░ рд╣реИ, рдпрд╣ рдХреЗрд╡рд▓ рдирдИ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬреЛ рд▓реЙрдЧрд╕реНрдЯреИрд╢ рдиреЗ рдЕрднреА рддрдХ рдирд╣реАрдВ рджреЗрдЦрд╛ рд╣реИред рд╕рдорд╛рди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд▓реЙрдЧрд╕реНрдЯреИрд╢ рдХреЗ рджреГрд╢реНрдп рдХреЗ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдЧрд┐рд░ рдЧрдП рдереЗ, рдЙрдиреНрд╣реЛрдВрдиреЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЕрдкрдиреЗ рдЖрдХрд╛рд░ рдХреЛ рдпрд╛рдж рдХрд┐рдпрд╛ рдФрд░ рдЕрдм рдХреЗрд╡рд▓ рдирдИ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпрд╛рдВ рд▓реЗрдВрдЧреЗред
рдЖрдЗрдП рд╣рдо рдЗрдирдкреБрдЯ рд╕реЗрдХреНрд╢рди рдХреЗ рдЕрдзреНрдпрдпрди рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдХрдИ рдФрд░ рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╣рдорд╛рд░реЗ рд▓рд┐рдП, рдЕрднреА рдХреЗ рд▓рд┐рдП рдФрд░ рдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред
рд░реВрдЯрд┐рдВрдЧ рдФрд░ рдбреЗрдЯрд╛ рд░реВрдкрд╛рдВрддрд░рдг
рдЖрдЗрдП рдирд┐рдореНрди рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ, рдорд╛рди рд▓реЗрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдЪреИрдирд▓ рд╕реЗ рд╕рдВрджреЗрд╢ рд╣реИрдВ, рдЙрдирдореЗрдВ рд╕реЗ рдХреБрдЫ рд╕реВрдЪрдирд╛рддреНрдордХ рд╣реИрдВ, рдФрд░ рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ рдПрдХ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рд╣реИред рдЯреИрдЧ рдореЗрдВ рдЕрдВрддрд░ред рдХреБрдЫ рдЬрд╛рдирдХрд╛рд░реА, рджреВрд╕рд░реЛрдВ рдХреЛ рдЧрд▓рддред
рд╣рдореЗрдВ рдЙрдиреНрд╣реЗрдВ рдЖрдЙрдЯрдкреБрдЯ рдкрд░ рдЕрд▓рдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╛рдиреА рд╣рдо рдПрдХ рдЪреИрдирд▓ рдореЗрдВ рд╕реВрдЪрдирд╛рддреНрдордХ рд╕рдВрджреЗрд╢ рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рдФрд░ рджреВрд╕рд░реЗ рдореЗрдВ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ред
рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрдирдкреБрдЯ рдЕрдиреБрднрд╛рдЧ рд╕реЗ рдлрд╝рд┐рд▓реНрдЯрд░ рдФрд░ рдЖрдЙрдЯрдкреБрдЯ рдкрд░ рдЬрд╛рдПрдВред
рдлрд╝рд┐рд▓реНрдЯрд░ рд╕реЗрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рд╣рдо рдЖрдиреЗ рд╡рд╛рд▓реЗ рд╕рдВрджреЗрд╢ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░реЗрдВрдЧреЗ, рдЗрд╕рд╕реЗ рд╣реИрд╢ (рдХреА-рд╡реИрд▓реНрдпреВ рдкреЗрдпрд░) рдкреНрд░рд╛рдкреНрдд рд╣реЛрдЧрд╛, рдЬрд┐рд╕реЗ рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЕрд░реНрдерд╛рддреНред рд╢рд░реНрддреЛрдВ рджреНрд╡рд╛рд░рд╛ рдЬреБрджрд╛ред рдФрд░ рдЖрдЙрдЯрдкреБрдЯ рд╕реЗрдХреНрд╢рди рдореЗрдВ, рд╣рдо рд╕рдВрджреЗрд╢реЛрдВ рдХрд╛ рдЪрдпрди рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдХреЛ рд╣рдорд╛рд░реЗ рдЪреИрдирд▓ рдкрд░ рднреЗрдЬрддреЗ рд╣реИрдВред
рдЦрд╛рдВрдЪреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рд╕рдВрджреЗрд╢ рдкрд╛рд░реНрд╕ рдХрд░рдирд╛
рдЯреЗрдХреНрд╕реНрдЯ рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдФрд░ рдЙрдирд╕реЗ рдлрд╝реАрд▓реНрдбреНрд╕ рдХрд╛ рдПрдХ рд╕реЗрдЯ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдлрд╝рд┐рд▓реНрдЯрд░ рд╕реЗрдХреНрд╢рди рдореЗрдВ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдкреНрд▓рдЧрдЗрди рд╣реИ - рдЧреНрд░реЙрдХред
рдпрд╣рд╛рдВ рд╡рд┐рд╕реНрддреГрдд рд╡рд┐рд╡рд░рдг рджреЗрдиреЗ рдХрд╛ рд▓рдХреНрд╖реНрдп рдирд╣реАрдВ рд╣реИ (рдЗрд╕рдХреЗ рд▓рд┐рдП рдореИрдВ
рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рджрд╕реНрддрд╛рд╡реЗрдЬ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рддрд╛ рд╣реВрдВ), рдореИрдВ рдЕрдкрдирд╛ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг рджреВрдВрдЧрд╛ред
рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЗрдирдкреБрдЯ рд▓рд╛рдЗрдиреЛрдВ рдХреЗ рдкреНрд░рд╛рд░реВрдк рдкрд░ рдирд┐рд░реНрдгрдп рд▓реЗрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдореИрдВрдиреЗ рдЙрдиреНрд╣реЗрдВ:
1 рдЬрд╛рдирдХрд╛рд░реА 1 рд╕рдВрджреЗрд╢
2 рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ 2
рдпрд╛рдиреА рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдкрд╣рд▓реЗ рдЖрддрд╛ рд╣реИ, рдлрд┐рд░ INFO / ERROR, рдлрд┐рд░ рдХреБрдЫ рд╢рдмреНрдж рдмрд┐рдирд╛ рд░рд┐рдХреНрдд рд╕реНрдерд╛рди рдХреЗред
рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
рддреЛ, рдлрд╝рд┐рд▓реНрдЯрд░ рд╕реЗрдХреНрд╢рди рдореЗрдВ, grok plugin рдореЗрдВ, рд╣рдореЗрдВ рдЕрдкрдиреА рд▓рд╛рдЗрдиреЛрдВ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреИрдЯрд░реНрди рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:
filter { grok { match => { "message" => ["%{INT:message_id} %{LOGLEVEL:message_type} %{WORD:message_text}"] } } }
рдпрд╣ рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдПрдХ рдирд┐рдпрдорд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рд╣реИред рд░реЗрдбреА-рдореЗрдб рдкреИрдЯрд░реНрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреИрд╕реЗ INT, LOGLEVEL, WORDред рдЙрдирдХрд╛ рд╡рд░реНрдгрди, рд╕рд╛рде рд╣реА рд╕рд╛рде рдЕрдиреНрдп рдкреИрдЯрд░реНрди рднреА
рдпрд╣рд╛рдВ рджреЗрдЦреЗ рдЬрд╛ рд╕рдХрддреЗ
рд╣реИрдВредрдЕрдм, рдЗрд╕ рдлрд╝рд┐рд▓реНрдЯрд░ рд╕реЗ рдЧреБрдЬрд░рддреЗ рд╣реБрдП, рд╣рдорд╛рд░рд╛ рд╕реНрдЯреНрд░рд┐рдВрдЧ рддреАрди рдлрд╝реАрд▓реНрдб рдХреЗ рд╣реИрд╢ рдореЗрдВ рдмрджрд▓ рдЬрд╛рдПрдЧрд╛: message_id, message_type, message_textред
рдЙрдиреНрд╣реЗрдВ рдЖрдЙрдЯрдкреБрдЯ рд╕реЗрдХреНрд╢рди рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдпрджрд┐ рдЖрдЙрдЯрдкреБрдЯ рдХрдорд╛рдВрдб рдореЗрдВ рд╕рдВрджреЗрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рддреЛ
рдЖрдЙрдЯрдкреБрдЯ рд╕реЗрдХреНрд╢рди рдореЗрдВ, рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рдпрд╛рдж рдХрд░рддреЗ рд╣реИрдВ, рд╣рдо рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рджреЛ рдзрд╛рд░рд╛рдУрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реЗ рдереЗред рдХреБрдЫ - рдЬреЛ рдХрд┐ iNFO, рд╣рдо рдХрдВрд╕реЛрд▓ рдореЗрдВ рдЖрдЙрдЯрдкреБрдЯ рдХрд░реЗрдВрдЧреЗ, рдФрд░ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде, рд╣рдо рдПрдХ рдлрд╛рдЗрд▓ рдкрд░ рдЖрдЙрдЯрдкреБрдЯ рдХрд░реЗрдВрдЧреЗред
рд╣рдо рдЗрди рдкрджреЛрдВ рдХреЛ рдХреИрд╕реЗ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рддреЗ рд╣реИрдВ? рд╕рдорд╕реНрдпрд╛ рдХреА рд╕реНрдерд┐рддрд┐ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рдорд╛рдзрд╛рди рдХрд╛ рд╕рдВрдХреЗрдд рджреЗрддреА рд╣реИ - рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЪрдпрдирд┐рдд message_type рдлрд╝реАрд▓реНрдб рд╣реИ, рдЬреЛ рдХреЗрд╡рд▓ рджреЛ рдорд╛рди INFO рдФрд░ ERROR рд▓реЗ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдЙрд╕рдХреЗ рд▓рд┐рдП рд╣реИ рдХрд┐ рд╣рдо рдпрджрд┐ рдХрдерди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдЪреБрдирд╛рд╡ рдХрд░реЗрдВрдЧреЗред
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
рд╣рдо рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ, рд╣рдо рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ, рд╣рдо рд╡рд┐рднрд╛рдЬрди рдХреЛ рджреЛ рдкреНрд░рд╡рд╛рд╣ рдореЗрдВ рджреЗрдЦрддреЗ рд╣реИрдВред