เบเบฒเบ™โ€‹เบ™เปเบฒโ€‹เปƒเบŠเป‰โ€‹เบžเบฒเบโ€‹เบ›เบฐโ€‹เบ•เบดโ€‹เบšเบฑเบ”โ€‹เบ‚เบญเบ‡ ELKโ€‹. เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ logstash

เบเบฒเบ™เบ™เปเบฒเบชเบฐเป€เบซเบ™เบต

เปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆเบ™เปเบฒเปƒเบŠเป‰เบฅเบฐเบšเบปเบšเบญเบทเปˆเบ™, เบžเบงเบเป€เบฎเบปเบฒเบ›เบฐเป€เบŠเบตเบ™เบเบฑเบšเบ„เบงเบฒเบกเบ•เป‰เบญเบ‡เบเบฒเบ™เบ—เบตเปˆเบˆเบฐเบ›เบฐเบกเบงเบ™เบœเบปเบ™เบˆเปเบฒเบ™เบงเบ™เบ‚เบฐเบซเบ™เบฒเบ”เปƒเบซเบเปˆเบ‚เบญเบ‡เบšเบฑเบ™เบ—เบถเบเบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™. ELK เบ–เบทเบเป€เบฅเบทเบญเบเป€เบ›เบฑเบ™เป€เบ„เบทเปˆเบญเบ‡เบกเบท. เบšเบปเบ”เบ„เบงเบฒเบกเบ™เบตเป‰เบˆเบฐเบชเบปเบ™เบ—เบฐเบ™เบฒเบ›เบฐเบชเบปเบšเบเบฒเบ™เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเปƒเบ™เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ stack เบ™เบตเป‰.

เบžเบงเบเป€เบฎเบปเบฒเบšเปเปˆเป„เบ”เป‰เบเปเบฒเบ™เบปเบ”เป€เบ›เบปเป‰เบฒเบซเบกเบฒเบเป€เบžเบทเปˆเบญเบญเบฐเบ—เบดเบšเบฒเบเบ„เบงเบฒเบกเบชเบฒเบกเบฒเบ”เบ‚เบญเบ‡เบกเบฑเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”, เปเบ•เปˆเบžเบงเบเป€เบฎเบปเบฒเบ•เป‰เบญเบ‡เบเบฒเบ™เบ—เบตเปˆเบˆเบฐเบชเบธเบกเปƒเบชเปˆเบเบฒเบ™เปเบเป‰เป„เบ‚เบšเบฑเบ™เบซเบฒเบžเบฒเบเบ›เบฐเบ•เบดเบšเบฑเบ”เป‚เบ”เบเบชเบฐเป€เบžเบฒเบฐ. เบ™เบตเป‰เปเบกเปˆเบ™เป€เบ™เบทเปˆเบญเบ‡เบกเบฒเบˆเบฒเบเบ„เบงเบฒเบกเบˆเบดเบ‡เบ—เบตเปˆเบงเปˆเบฒเป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเบกเบตเป€เบญเบเบฐเบชเบฒเบ™เปเบฅเบฐเบฎเบนเบšเบžเบฒเบšเบ—เบตเปˆเบเบฝเบกเบžเป‰เบญเบกเบซเบผเบฒเบเบžเปเบชเบปเบกเบ„เบงเบ™, เบกเบฑเบ™เบกเบตเบ‚เบธเบกเบซเบผเบฒเบ, เบขเปˆเบฒเบ‡เบซเบ™เป‰เบญเบเบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบžเบปเบšเป€เบซเบฑเบ™เบžเบงเบเบกเบฑเบ™.

เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบ™เบณเปƒเบŠเป‰ stack เบœเปˆเบฒเบ™ docker-compose. เบเบดเปˆเบ‡เป„เบ›เบเบงเปˆเบฒเบ™เบฑเป‰เบ™, เบžเบงเบเป€เบฎเบปเบฒเบกเบต docker-compose.yml เบ—เบตเปˆเบ‚เบฝเบ™เป„เบ”เป‰เบ”เบต, เป€เบŠเบดเปˆเบ‡เบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เบžเบงเบเป€เบฎเบปเบฒเบเบปเบ stack เป€เบเบทเบญเบšเบšเปเปˆเบกเบตเบšเบฑเบ™เบซเบฒ. เปเบฅเบฐโ€‹เป€เบšเบดเปˆเบ‡โ€‹เบ„เบทโ€‹เบงเปˆเบฒโ€‹เบžเบงเบโ€‹เป€เบฎเบปเบฒโ€‹เป„เบŠโ€‹เบŠเบฐโ€‹เบ™เบฐโ€‹เป„เบ”เป‰โ€‹เปƒเบเป‰โ€‹เป€เบ‚เบปเป‰เบฒโ€‹เบกเบฒโ€‹เปเบฅเป‰เบง, เบšเบฑเบ”โ€‹เบ™เบตเป‰โ€‹เบžเบงเบโ€‹เป€เบฎเบปเบฒโ€‹เบˆเบฐโ€‹เบ›เบฑเบšโ€‹เบ›เปˆเบฝเบ™โ€‹เบกเบฑเบ™โ€‹เปœเป‰เบญเบโ€‹เปœเบถเปˆเบ‡โ€‹เปƒเบซเป‰โ€‹เป€เปเบฒเบฐโ€‹เบชเบปเบกโ€‹เบเบฑเบšโ€‹เบ„เบงเบฒเบกโ€‹เบ•เป‰เบญเบ‡โ€‹เบเบฒเบ™โ€‹เบ‚เบญเบ‡โ€‹เบžเบงเบโ€‹เป€เบฎเบปเบฒ เปเบฅเบฐโ€‹เบ™เบฑเป‰เบ™โ€‹เปเบกเปˆเบ™โ€‹เบกเบฑเบ™.

เปเบ•เปˆเบซเบ™เป‰เบฒเป€เบชเบเบ”เบฒเบ, เบ„เบงเบฒเบกเบžเบฐเบเบฒเบเบฒเบกเปƒเบ™เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบฅเบฐเบšเบปเบšเป€เบžเบทเปˆเบญเบฎเบฑเบš เปเบฅเบฐเบ›เบฐเบกเบงเบ™เบœเบปเบ™เบšเบฑเบ™เบ—เบถเบเบˆเบฒเบเปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเบšเปเปˆเบ›เบฐเบชเบปเบšเบœเบปเบ™เบชเปเบฒเป€เบฅเบฑเบ”เปƒเบ™เบ—เบฑเบ™เบ—เบต. เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบ•เบฑเบ”เบชเบดเบ™เปƒเบˆเบงเปˆเบฒเบกเบฑเบ™เบกเบตเบกเบนเบ™เบ„เปˆเบฒเบเบฒเบ™เบชเบถเบเบชเบฒเปเบ•เปˆเบฅเบฐเบญเบปเบ‡เบ›เบฐเบเบญเบšเปเบเบเบ•เปˆเบฒเบ‡เบซเบฒเบ, เปเบฅเบฐเบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบเบฑเบšเบ„เบทเบ™เบชเบนเปˆเบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบ‚เบญเบ‡เบžเบงเบเป€เบ‚เบปเบฒ.

เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบžเบงเบเป€เบฎเบปเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบ”เป‰เบงเบ logstash.

เบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบก, เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”, เปเบฅเปˆเบ™ Logstash เปƒเบ™เบ–เบฑเบ‡

เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ•เบดเบ”เบ•เบฑเป‰เบ‡เบžเบงเบเป€เบฎเบปเบฒเปƒเบŠเป‰ docker-compose;

เบฎเบนเบšเบžเบฒเบš logstash เบ—เบตเปˆเป„เบ”เป‰เบฅเบปเบ‡เบ—เบฐเบšเบฝเบ™เบขเบนเปˆเปƒเบ™ docker-compose.yml เบ•เบปเป‰เบ™เบชเบฐเบšเบฑเบšเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเปเบกเปˆเบ™ docker.elastic.co/logstash/logstash:6.3.2

เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเปƒเบŠเป‰เบกเบฑเบ™เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ—เบปเบ”เบฅเบญเบ‡.

เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบ‚เบฝเบ™ docker-compose.yml เปเบเบเบ•เปˆเบฒเบ‡เบซเบฒเบเป€เบžเบทเปˆเบญเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™ logstash. เปเบ™เปˆเบ™เบญเบ™, เบกเบฑเบ™เป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰เบ—เบตเปˆเบˆเบฐเป€เบ›เบตเบ”เบ•เบปเบงเบฎเบนเบšเบžเบฒเบšเบˆเบฒเบเป€เบชเบฑเป‰เบ™เบ„เปเบฒเบชเบฑเปˆเบ‡, เปเบ•เปˆเบžเบงเบเป€เบฎเบปเบฒเบเปเบฒเบฅเบฑเบ‡เปเบเป‰เป„เบ‚เบšเบฑเบ™เบซเบฒเบชเบฐเป€เบžเบฒเบฐ, เบšเปˆเบญเบ™เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบ—เบธเบเบขเปˆเบฒเบ‡เบˆเบฒเบ docker-compose.

เป‚เบ”เบเบซเบเปเป‰เบเปˆเบฝเบงเบเบฑเบšเป„เบŸเบฅเปŒเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ

เบ”เบฑเปˆเบ‡เบ•เปเปˆเป„เบ›เบ™เบตเป‰เบˆเบฒเบเบ„เปเบฒเบญเบฐเบ—เบดเบšเบฒเบ, logstash เบชเบฒเบกเบฒเบ”เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เป„เบ”เป‰เบชเปเบฒเบฅเบฑเบšเบซเบ™เบถเปˆเบ‡เบŠเปˆเบญเบ‡, เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ™เบตเป‰เบกเบฑเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบœเปˆเบฒเบ™เป„เบŸเบฅเปŒ *.conf, เบซเบผเบทเบชเปเบฒเบฅเบฑเบšเบซเบผเบฒเบเบŠเปˆเบญเบ‡เบ—เบฒเบ‡, เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ™เบตเป‰เบกเบฑเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบœเปˆเบฒเบ™เป„เบŸเบฅเปŒ pipelines.yml, เป€เบŠเบดเปˆเบ‡, เปƒเบ™เบ—เบฒเบ‡เบเบฑเบšเบเบฑเบ™. , เบˆเบฐเป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบเบฑเบšเป„เบŸเบฅเปŒ .conf เบชเปเบฒเบฅเบฑเบšเปเบ•เปˆเบฅเบฐเบŠเปˆเบญเบ‡.
เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เป€เบญเบปเบฒเป€เบชเบฑเป‰เบ™เบ—เบฒเบ‡เบ—เบตเบชเบญเบ‡. เป€เบšเบดเปˆเบ‡โ€‹เบ„เบทโ€‹เบงเปˆเบฒโ€‹เบžเบงเบโ€‹เป€เบฎเบปเบฒโ€‹เบชเบฒโ€‹เบเบปเบ™โ€‹เปเบฅเบฐโ€‹เบชเบฒโ€‹เบกเบฒเบ”โ€‹เบ‚เบฐโ€‹เบซเบเบฒเบโ€‹เบ•เบปเบงโ€‹เบซเบผเบฒเบโ€‹เบ‚เบถเป‰เบ™. เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบžเบงเบเป€เบฎเบปเบฒเบชเป‰เบฒเบ‡ pipelines.yml, เปเบฅเบฐเบชเป‰เบฒเบ‡เบฅเบฐเบšเบปเบš pipelines เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเปƒเบชเปˆเป„เบŸเบฅเปŒ .conf เบชเปเบฒเบฅเบฑเบšเปเบ•เปˆเบฅเบฐเบŠเปˆเบญเบ‡.

เบžเบฒเบเปƒเบ™เบšเบฑเบ™เบˆเบธเบกเบตเป„เบŸเบฅเปŒเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบญเบทเปˆเบ™ - logstash.yml . เบžเบงเบเป€เบฎเบปเบฒเบšเปเปˆเปเบ•เบฐเบ•เป‰เบญเบ‡เบกเบฑเบ™, เบžเบงเบเป€เบฎเบปเบฒเปƒเบŠเป‰เบกเบฑเบ™เบ„เบทเป€เบเบปเปˆเบฒ.

เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เป‚เบ„เบ‡เบชเป‰เบฒเบ‡เป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ:

เบเบฒเบ™โ€‹เบ™เปเบฒโ€‹เปƒเบŠเป‰โ€‹เบžเบฒเบโ€‹เบ›เบฐโ€‹เบ•เบดโ€‹เบšเบฑเบ”โ€‹เบ‚เบญเบ‡ ELKโ€‹. เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ logstash

เป€เบžเบทเปˆเบญเบฎเบฑเบšเบ‚เปเป‰เบกเบนเบ™เบเบฒเบ™เบ›เป‰เบญเบ™เบ‚เปเป‰เบกเบนเบ™, เบชเปเบฒเบฅเบฑเบšเบ•เบญเบ™เบ™เบตเป‰เบžเบงเบเป€เบฎเบปเบฒเบชเบปเบกเบกเบธเบ”เบงเปˆเบฒเบ™เบตเป‰เปเบกเปˆเบ™ tcp เปƒเบ™เบžเบญเบ” 5046, เปเบฅเบฐเบชเปเบฒเบฅเบฑเบšเบœเบปเบ™เบœเบฐเบฅเบดเบ”เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเปƒเบŠเป‰ stdout.

เบ™เบตเป‰เปเบกเปˆเบ™เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบ—เบตเปˆเบ‡เปˆเบฒเบเบ”เบฒเบเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เป€เบ›เบตเบ”เบ•เบปเบงเบ„เบฑเป‰เบ‡เบ—เปเบฒเบญเบดเบ”. เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบงเปˆเบฒเบงเบฝเบเบ‡เบฒเบ™เป€เบšเบทเป‰เบญเบ‡เบ•เบปเป‰เบ™เปเบกเปˆเบ™เป€เบžเบทเปˆเบญเป€เบ›เบตเบ”เบ•เบปเบง.

เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบžเบงเบเป€เบฎเบปเบฒเบกเบต docker-compose.yml เบ™เบตเป‰

version: '3'

networks:
  elk:

volumes:
  elasticsearch:
    driver: local

services:

  logstash:
    container_name: logstash_one_channel
    image: docker.elastic.co/logstash/logstash:6.3.2
    networks:
      	- elk
    ports:
      	- 5046:5046
    volumes:
      	- ./config/pipelines.yml:/usr/share/logstash/config/pipelines.yml:ro
	- ./config/pipelines:/usr/share/logstash/config/pipelines:ro

เบžเบงเบเป€เบฎเบปเบฒเป€เบซเบฑเบ™เบซเบเบฑเบ‡เบขเบนเปˆเบ™เบตเป‰?

  1. เป€เบ„เบทเบญเบ‚เปˆเบฒเบเปเบฅเบฐเบ›เบฐเบฅเบดเบกเบฒเบ™เป„เบ”เป‰เบ–เบทเบเป€เบญเบปเบฒเบกเบฒเบˆเบฒเบ docker-compose.yml เบ•เบปเป‰เบ™เบชเบฐเบšเบฑเบš (เบซเบ™เบถเปˆเบ‡เบšเปˆเบญเบ™เบ—เบตเปˆ stack เบ—เบฑเบ‡เบซเบกเบปเบ”เบ–เบทเบเป€เบ›เบตเบ”เบ•เบปเบง) เปเบฅเบฐเบ‚เป‰เบญเบเบ„เบดเบ”เบงเปˆเบฒเบžเบงเบเบกเบฑเบ™เบšเปเปˆเบกเบตเบœเบปเบ™เบเบฐเบ—เบปเบšเบขเปˆเบฒเบ‡เบซเบผเบงเบ‡เบซเบผเบฒเบเบ•เปเปˆเบžเบฒเบšเบฅเบงเบกเบขเบนเปˆเบ—เบตเปˆเบ™เบตเป‰.
  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 directory, เบšเปˆเบญเบ™เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบกเบตเป„เบŸเบฅเปŒเบ—เบตเปˆเบกเบตเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบŠเปˆเบญเบ‡, เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบต /usr/share/logstash/config/pipelines เปเบฅเบฐเบเบฑเบ‡เป€เบฎเบฑเบ”เปƒเบซเป‰เบกเบฑเบ™เบญเปˆเบฒเบ™เป„เบ”เป‰เป€เบ—เบปเปˆเบฒเบ™เบฑเป‰เบ™.

เบเบฒเบ™โ€‹เบ™เปเบฒโ€‹เปƒเบŠเป‰โ€‹เบžเบฒเบโ€‹เบ›เบฐโ€‹เบ•เบดโ€‹เบšเบฑเบ”โ€‹เบ‚เบญเบ‡ ELKโ€‹. เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ logstash

เป„เบŸเบฅเปŒ 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

เปเบ•เปˆเปƒเบ™เป€เบงเบฅเบฒเบ”เบฝเบงเบเบฑเบ™, เบžเบงเบเป€เบฎเบปเบฒเบเบฑเบ‡เป€เบซเบฑเบ™เบงเปˆเบฒ:

logstash_one_channel | [2019-04-29T11:28:59,790][ERROR][logstash.licensechecker.licensereader] เบšเปเปˆเบชเบฒเบกเบฒเบ”เบ”เบถเบ‡เบ‚เปเป‰เบกเบนเบ™เปƒเบšเบญเบฐเบ™เบธเบเบฒเบ”เบˆเบฒเบเป€เบŠเบตเบšเป€เบงเบตเปƒเบšเบญเบฐเบ™เบธเบเบฒเบ”เป„เบ”เป‰ {:message=>โ€œElasticsearch Unreachable: [http://elasticsearch:9200/][Manticore ::ResolutionFailure] elasticsearch",...

logstash_one_channel | [2019-04-29T11:28:59,894][INFO][logstash.pipeline ] เบ—เปเปˆเป„เบ”เป‰เป€เบฅเบตเปˆเบกเบชเบณเป€เบฅเบฑเบ”เปเบฅเป‰เบง {:pipeline_id=>".monitoring-logstash", :thread=>"# "}

logstash_one_channel | [2019-04-29T11:28:59,988][INFO ][logstash.agent ] เบ—เปเปˆเปเบฅเปˆเบ™ {:count=>2, :running_pipelines=>[:HABR, :"monitoring-logstash"], :non_running_pipelines=>[ ]}
logstash_one_channel | [2019-04-29T11:29:00,015][ERROR][logstash.inputs.metrics] X-Pack เบ–เบทเบเบ•เบดเบ”เบ•เบฑเป‰เบ‡เบขเบนเปˆเปƒเบ™ Logstash เปเบ•เปˆเบšเปเปˆเปเบกเปˆเบ™เบขเบนเปˆเปƒเบ™ Elasticsearch. เบเบฐเบฅเบธเบ™เบฒเบ•เบดเบ”เบ•เบฑเป‰เบ‡ X-Pack เปƒเบ™ Elasticsearch เป€เบžเบทเปˆเบญเปƒเบŠเป‰เบ„เบธเบ™เบชเบปเบกเบšเบฑเบ”เบเบฒเบ™เบ•เบดเบ”เบ•เบฒเบก. เบ„เบธเบ™เบชเบปเบกเบšเบฑเบ”เบญเบทเปˆเบ™เป†เบญเบฒเบ”เบˆเบฐเบชเบฒเบกเบฒเบ”เปƒเบŠเป‰เป„เบ”เป‰.
logstash_one_channel | [2019-04-29T11:29:00,526][INFO][logstash.agent ] เป€เบฅเบตเปˆเบกโ€‹เบ•เบปเป‰เบ™โ€‹เบชเปเบฒโ€‹เป€เบฅเบฑเบ” Logstash API 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 Unreachable: [http://elasticsearch:9200/][Manticore::ResolutionFailure] 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 Unreachable: [http://elasticsearch:9200/][Manticore::ResolutionFailure] elasticsearch"}

เปเบฅเบฐเบšเบฑเบ™เบ—เบถเบเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเปเบกเปˆเบ™ creeping เป€เบ–เบดเบ‡เบ•เบฐเบซเบผเบญเบ”เป€เบงเบฅเบฒ.

เปƒเบ™เบ—เบตเปˆเบ™เบตเป‰เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเป„เบ”เป‰เป€เบ™เบฑเป‰เบ™เปƒเบชเปˆเบ‚เปเป‰เบ„เบงเบฒเบกเบชเบตเบ‚เบฝเบงเบงเปˆเบฒเบ—เปเปˆเป„เบ”เป‰เป€เบ›เบตเบ”เบ•เบปเบงเบขเปˆเบฒเบ‡เบชเปเบฒเป€เบฅเบฑเบ”เบœเบปเบ™, เบ‚เปเป‰เบ„เบงเบฒเบกเบชเบฐเปเบ”เบ‡เบ‚เปเป‰เบœเบดเบ”เบžเบฒเบ”เบชเบตเปเบ”เบ‡เปเบฅเบฐเป€เบ›เบฑเบ™เบชเบตเป€เบซเบผเบทเบญเบ‡เบ‚เปเป‰เบ„เบงเบฒเบกเบเปˆเบฝเบงเบเบฑเบšเบ„เบงเบฒเบกเบžเบฐเบเบฒเบเบฒเบกเบ—เบตเปˆเบˆเบฐเบ•เบดเบ”เบ•เปเปˆ. เปเบœเปˆเบ™เบเบทเบ”: 9200
เบญเบฑเบ™เบ™เบตเป‰เป€เบเบตเบ”เบ‚เบถเป‰เบ™เป€เบžเบฒเบฐเบงเปˆเบฒ logstash.conf, เบฅเบงเบกเบขเบนเปˆเปƒเบ™เบฎเบนเบš, เบกเบตเบเบฒเบ™เบเบงเบ”เบชเบญเบšเบ„เบงเบฒเบกเบžเป‰เบญเบกเบ‚เบญเบ‡ elasticsearch. เบซเบผเบฑเบ‡เบˆเบฒเบเบ—เบตเปˆเบ—เบฑเบ‡เบซเบกเบปเบ”, logstash เบ–เบทเบงเปˆเบฒเบกเบฑเบ™เป€เบฎเบฑเบ”เบงเบฝเบเป€เบ›เบฑเบ™เบชเปˆเบงเบ™เบซเบ™เบถเปˆเบ‡เบ‚เบญเบ‡ Elk stack, เปเบ•เปˆเบžเบงเบเป€เบฎเบปเบฒเปเบเบเบกเบฑเบ™เบญเบญเบ.

เบกเบฑเบ™เป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰เบ—เบตเปˆเบˆเบฐเป€เบฎเบฑเบ”เบงเบฝเบ, เปเบ•เปˆเบกเบฑเบ™เบšเปเปˆเบชเบฐเบ”เบงเบ.

เบเบฒเบ™เปเบเป‰เป„เบ‚เปเบกเปˆเบ™เป€เบžเบทเปˆเบญเบ›เบดเบ”เบเบฒเบ™เบเบงเบ”เบชเบญเบšเบ™เบตเป‰เบœเปˆเบฒเบ™เบ•เบปเบงเปเบ›เบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบก 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

เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™, เบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เปเบกเปˆเบ™เบ”เบต. เบ–เบฑเบ‡เปเบกเปˆเบ™เบเบฝเบกเบžเป‰เบญเบกเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ—เบปเบ”เบฅเบญเบ‡.

เบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เบžเบดเบกเบญเบตเบเป€เบ—เบทเปˆเบญเบซเบ™เบถเปˆเบ‡เปƒเบ™ console เบ•เปเปˆเป„เบ›:

echo '13123123123123123123123213123213' | nc localhost 5046

เปเบฅเบฐเป€เบšเบดเปˆเบ‡:

logstash_one_channel | {
logstash_one_channel |         "message" => "13123123123123123123123213123213",
logstash_one_channel |      "@timestamp" => 2019-04-29T11:43:44.582Z,
logstash_one_channel |        "@version" => "1",
logstash_one_channel |     "habra_field" => "Hello Habr",
logstash_one_channel |            "host" => "gateway",
logstash_one_channel |            "port" => 49418
logstash_one_channel | }

เป€เบฎเบฑเบ”เบงเบฝเบเบžเบฒเบเปƒเบ™เบŠเปˆเบญเบ‡เบ”เบฝเบง

เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เป€เบ›เบตเบ”เบ•เบปเบง. เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เปƒเบŠเป‰เป€เบงเบฅเบฒเปƒเบ™เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ logstash เบ•เบปเบงเบ‚เบญเบ‡เบกเบฑเบ™เป€เบญเบ‡. เบšเปเปˆเปƒเบซเป‰เปเบ•เบฐเบ—เบตเปˆเป„เบŸเบฅเปŒ pipelines.yml เบชเปเบฒเบฅเบฑเบšเปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™, เปƒเบซเป‰เป€เบšเบดเปˆเบ‡เบชเบดเปˆเบ‡เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เป„เบ”เป‰เบฎเบฑเบšเป‚เบ”เบเบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบเบฑเบšเบŠเปˆเบญเบ‡เบ—เบฒเบ‡เบ”เบฝเบง.

เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบ•เป‰เบญเบ‡เป€เบงเบปเป‰เบฒเบงเปˆเบฒเบซเบผเบฑเบเบเบฒเบ™เบ—เบปเปˆเบงเป„เบ›เบ‚เบญเบ‡เบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบเบฑเบšเป„เบŸเบฅเปŒเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบŠเปˆเบญเบ‡เบ—เบฒเบ‡เปเบกเปˆเบ™เป„เบ”เป‰เบญเบฐเบ—เบดเบšเบฒเบเป„เบงเป‰เปƒเบ™เบ„เบนเปˆเบกเบทเบขเปˆเบฒเบ‡เป€เบ›เบฑเบ™เบ—เบฒเบ‡เบเบฒเบ™, เบ—เบตเปˆเบ™เบตเป‰ เบ—เบตเปˆเบ™เบตเป‰
เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™เบญเปˆเบฒเบ™เบžเบฒเบชเบฒเบฅเบฑเบ”เป€เบŠเบ, เบžเบงเบเป€เบฎเบปเบฒเปƒเบŠเป‰เบญเบฑเบ™เบ™เบตเป‰ เบšเบปเบ”เบ„เบงเบฒเบก(เปเบ•เปˆ syntax เบ„เปเบฒเบ–เบฒเบกเบกเบตเป€เบเบปเปˆเบฒ, เบžเบงเบเป€เบฎเบปเบฒเบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบžเบดเบˆเบฒเบฅเบฐเบ™เบฒเป€เบฅเบทเปˆเบญเบ‡เบ™เบตเป‰).

เปƒเบซเป‰เป„เบ›เบ•เบฒเบกเบฅเปเบฒเบ”เบฑเบšเบˆเบฒเบเบžเบฒเบเบชเปˆเบงเบ™เบ›เป‰เบญเบ™เบ‚เปเป‰เบกเบนเบ™. เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เป€เบซเบฑเบ™เบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบเปˆเบฝเบงเบเบฑเบš TCP เปเบฅเป‰เบง. เบกเบตเบซเบเบฑเบ‡เบญเบตเบเปเบ”เปˆเบ—เบตเปˆเปœเป‰เบฒเบชเบปเบ™เปƒเบˆเบขเบนเปˆเบ—เบตเปˆเบ™เบตเป‰?

เบ—เบปเบ”เบชเบญเบšเบ‚เปเป‰เบ„เบงเบฒเบกเป‚เบ”เบเปƒเบŠเป‰เบเบฒเบ™เป€เบ•เบฑเป‰เบ™เบ‚เบญเบ‡เบซเบปเบงเปƒเบˆ

เบกเบตเป‚เบญเบเบฒเบ”เบ—เบตเปˆเบซเบ™เป‰เบฒเบชเบปเบ™เปƒเบˆเบ—เบตเปˆเบˆเบฐเบชเป‰เบฒเบ‡เบ‚เปเป‰เบ„เบงเบฒเบกเบ—เบปเบ”เบชเบญเบšเบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”.
เป€เบžเบทเปˆเบญเป€เบฎเบฑเบ”เบชเบดเปˆเบ‡เบ™เบตเป‰, เบ—เปˆเบฒเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เป„เบ”เป‰เป€เบ›เบตเบ”เปƒเบŠเป‰ plugin heartbean เปƒเบ™เบžเบฒเบเบ›เป‰เบญเบ™เบ‚เปเป‰เบกเบนเบ™.

input {
  heartbeat {
    message => "HeartBeat!"
   }
  } 

เป€เบ›เบตเบ”เบกเบฑเบ™, เป€เบฅเบตเปˆเบกเบฎเบฑเบšเป€เบ—เบทเปˆเบญเบฅเบฐเบ™เบฒเบ—เบต

logstash_one_channel | {
logstash_one_channel |      "@timestamp" => 2019-04-29T13:52:04.567Z,
logstash_one_channel |     "habra_field" => "Hello Habr",
logstash_one_channel |         "message" => "HeartBeat!",
logstash_one_channel |        "@version" => "1",
logstash_one_channel |            "host" => "a0667e5c57ec"
logstash_one_channel | }

เบ–เป‰เบฒเบžเบงเบเป€เบฎเบปเบฒเบ•เป‰เบญเบ‡เบเบฒเบ™เบฎเบฑเบšเป€เบฅเบทเป‰เบญเบเป†, เบžเบงเบเป€เบฎเบปเบฒเบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เป€เบžเบตเปˆเบกเบžเบฒเบฅเบฒเบกเบดเป€เบ•เบตเป„เบฅเบเบฐเบซเปˆเบฒเบ‡.
เบ™เบตเป‰เปเบกเปˆเบ™เบงเบดเบ—เบตเบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเป„เบ”เป‰เบฎเบฑเบšเบ‚เปเป‰เบ„เบงเบฒเบกเบ—เบธเบเป† 10 เบงเบดเบ™เบฒเบ—เบต.

input {
  heartbeat {
    message => "HeartBeat!"
    interval => 10
   }
  }

เบ”เบถเบ‡เบ‚เปเป‰เบกเบนเบ™เบˆเบฒเบเป„เบŸเบฅเปŒ

เบžเบงเบเป€เบฎเบปเบฒเบเบฑเบ‡เป„เบ”เป‰เบ•เบฑเบ”เบชเบดเบ™เปƒเบˆเป€เบšเบดเปˆเบ‡เบฎเบนเบšเปเบšเบšเป„เบŸเบฅเปŒ. เบ–เป‰เบฒเบกเบฑเบ™เป€เบฎเบฑเบ”เบงเบฝเบเป„เบ”เป‰เบ”เบตเบเบฑเบšเป„เบŸเบฅเปŒ, เบšเบฒเบ‡เบ—เบตเบญเบฒเบ”เบˆเบฐเบšเปเปˆเบ•เป‰เบญเบ‡เบเบฒเบ™เบ•เบปเบงเปเบ—เบ™, เบขเปˆเบฒเบ‡เบซเบ™เป‰เบญเบเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เปƒเบ™เบ—เป‰เบญเบ‡เบ–เบดเปˆเบ™.

เบญเบตเบ‡เบ•เบฒเบกเบ„เปเบฒเบญเบฐเบ—เบดเบšเบฒเบ, เบฎเบนเบšเปเบšเบšเบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบ„เบงเบ™เบˆเบฐเบ„เป‰เบฒเบเบ„เบทเบเบฑเบš tail -f, i.e. เบญเปˆเบฒเบ™เปเบ–เบงเปƒเปเปˆ เบซเบผเบท, เป€เบ›เบฑเบ™เบ—เบฒเบ‡เป€เบฅเบทเบญเบ, เบญเปˆเบฒเบ™เป„เบŸเบฅเปŒเบ—เบฑเบ‡เปเบปเบ”.

เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบชเบดเปˆเบ‡เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบ•เป‰เบญเบ‡เบเบฒเบ™เบ—เบตเปˆเบˆเบฐเป„เบ”เป‰เบฎเบฑเบš:

  1. เบžเบงเบโ€‹เป€เบฎเบปเบฒโ€‹เบ•เป‰เบญเบ‡โ€‹เบเบฒเบ™โ€‹เบ—เบตเปˆโ€‹เบˆเบฐโ€‹เป„เบ”เป‰โ€‹เบฎเบฑเบšโ€‹เป€เบชเบฑเป‰เบ™โ€‹เบ—เบตเปˆโ€‹เบ•เปเปˆโ€‹เบ—เป‰เบฒเบโ€‹เบเบฑเบšโ€‹เป„เบŸเบฅโ€‹เปŒโ€‹เบšเบฑเบ™โ€‹เบ—เบถเบโ€‹เบซเบ™เบถเปˆเบ‡โ€‹.
  2. เบžเบงเบเป€เบฎเบปเบฒเบ•เป‰เบญเบ‡เบเบฒเบ™เบ—เบตเปˆเบˆเบฐเป„เบ”เป‰เบฎเบฑเบšเบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบ‚เบฝเบ™เบฅเบปเบ‡เปƒเบ™เป„เบŸเบฅเปŒเบšเบฑเบ™เบ—เบถเบเบซเบผเบฒเบ, เปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆเบชเบฒเบกเบฒเบ”เปเบเบเบชเบดเปˆเบ‡เบ—เบตเปˆเป„เบ”เป‰เบฎเบฑเบšเบˆเบฒเบเบšเปˆเบญเบ™เปƒเบ”.
  3. เบžเบงเบโ€‹เป€เบฎเบปเบฒโ€‹เบ•เป‰เบญเบ‡โ€‹เบเบฒเบ™โ€‹เบ—เบตเปˆโ€‹เบˆเบฐโ€‹เป€เบฎเบฑเบ”โ€‹เปƒเบซเป‰โ€‹เปเบ™เปˆโ€‹เปƒเบˆเบงเปˆโ€‹เบฒโ€‹เปƒเบ™โ€‹เป€เบงโ€‹เบฅเบฒโ€‹เบ—เบตเปˆ logstash เปเบกเปˆเบ™ restartedโ€‹, เบกเบฑเบ™โ€‹เบšเปเปˆโ€‹เป„เบ”เป‰โ€‹เบฎเบฑเบšโ€‹เบ‚เปเป‰โ€‹เบกเบนเบ™โ€‹เบ™เบตเป‰โ€‹เบญเบตเบโ€‹เป€เบ—เบทเปˆเบญโ€‹เบซเบ™เบถเปˆเบ‡โ€‹.
  4. เบžเบงเบเป€เบฎเบปเบฒเบ•เป‰เบญเบ‡เบเบฒเบ™เบเบงเบ”เบชเบญเบšเบงเปˆเบฒเบ–เป‰เบฒ logstash เบ–เบทเบเบ›เบดเบ”, เปเบฅเบฐเบ‚เปเป‰เบกเบนเบ™เบเบฑเบ‡เบชเบทเบšเบ•เปเปˆเบ–เบทเบเบ‚เบฝเบ™เปƒเบชเปˆเป„เบŸเบฅเปŒ, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เป€เบกเบทเปˆเบญเบžเบงเบเป€เบฎเบปเบฒเป€เบ›เบตเบ”เบ•เบปเบงเบกเบฑเบ™, เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเป„เบ”เป‰เบฎเบฑเบšเบ‚เปเป‰เบกเบนเบ™เบ™เบตเป‰.

เป€เบžเบทเปˆเบญเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบ—เบปเบ”เบฅเบญเบ‡, เปƒเบซเป‰เป€เบžเบตเปˆเบกเปเบ–เบงเบญเบทเปˆเบ™เปƒเบชเปˆ docker-compose.yml, เป€เบ›เบตเบ”เป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบงเบฒเบ‡เป„เบŸเบฅเปŒ.

version: '3'

networks:
  elk:

volumes:
  elasticsearch:
    driver: local

services:

  logstash:
    container_name: logstash_one_channel
    image: docker.elastic.co/logstash/logstash:6.3.2
    networks:
      - elk
    environment:
      XPACK_MONITORING_ENABLED: "false"
    ports:
      - 5046:5046
   volumes:
      - ./config/pipelines.yml:/usr/share/logstash/config/pipelines.yml:ro
      - ./config/pipelines:/usr/share/logstash/config/pipelines:ro
      - ./logs:/usr/share/logstash/input

เปเบฅเบฐเบ›เปˆเบฝเบ™เบžเบฒเบเบชเปˆเบงเบ™เบเบฒเบ™เบ›เป‰เบญเบ™เบ‚เปเป‰เบกเบนเบ™เปƒเบ™ habr_pipeline.conf

input {
  file {
    path => "/usr/share/logstash/input/*.log"
   }
  }

เบกเบฒเป€เบฅเบตเปˆเบกเบเบฑเบ™เป€เบฅเบตเบ:

docker-compose up

เป€เบžเบทเปˆเบญเบชเป‰เบฒเบ‡เปเบฅเบฐเบ‚เบฝเบ™เป„เบŸเบฅเปŒเบšเบฑเบ™เบ—เบถเบเบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเปƒเบŠเป‰เบ„เปเบฒเบชเบฑเปˆเบ‡:

โ€จecho '1' >> logs/number1.log

{
logstash_one_channel |            "host" => "ac2d4e3ef70f",
logstash_one_channel |     "habra_field" => "Hello Habr",
logstash_one_channel |      "@timestamp" => 2019-04-29T14:28:53.876Z,
logstash_one_channel |        "@version" => "1",
logstash_one_channel |         "message" => "1",
logstash_one_channel |            "path" => "/usr/share/logstash/input/number1.log"
logstash_one_channel | }

เปเบกเปˆเบ™เปเบฅเป‰เบง, เบกเบฑเบ™เป€เบฎเบฑเบ”เบงเบฝเบ!

เปƒเบ™เป€เบงเบฅเบฒเบ”เบฝเบงเบเบฑเบ™, เบžเบงเบเป€เบฎเบปเบฒเป€เบซเบฑเบ™เบงเปˆเบฒเบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เป€เบžเบตเปˆเบกเบžเบฒเบเบชเบฐเบซเบ™เบฒเบกเป€เบชเบฑเป‰เบ™เบ—เบฒเบ‡เป‚เบ”เบเบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”. เบ™เบตเป‰เบซเบกเบฒเบเบ„เบงเบฒเบกเบงเปˆเบฒเปƒเบ™เบญเบฐเบ™เบฒเบ„เบปเบ”, เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบชเบฒเบกเบฒเบ”เบเบฑเปˆเบ™เบ•เบญเบ‡เบšเบฑเบ™เบ—เบถเบเป‚เบ”เบเบกเบฑเบ™.

เบฅเบญเบ‡เบญเบตเบเบ„เบฑเป‰เบ‡:

echo '2' >> logs/number1.log

{
logstash_one_channel |            "host" => "ac2d4e3ef70f",
logstash_one_channel |     "habra_field" => "Hello Habr",
logstash_one_channel |      "@timestamp" => 2019-04-29T14:28:59.906Z,
logstash_one_channel |        "@version" => "1",
logstash_one_channel |         "message" => "2",
logstash_one_channel |            "path" => "/usr/share/logstash/input/number1.log"
logstash_one_channel | }

เปเบฅเบฐเบ•เบญเบ™เบ™เบตเป‰เป„เบ›เบซเบฒเป„เบŸเบฅเปŒเบญเบทเปˆเบ™:

 echo '1' >> logs/number2.log

{
logstash_one_channel |            "host" => "ac2d4e3ef70f",
logstash_one_channel |     "habra_field" => "Hello Habr",
logstash_one_channel |      "@timestamp" => 2019-04-29T14:29:26.061Z,
logstash_one_channel |        "@version" => "1",
logstash_one_channel |         "message" => "1",
logstash_one_channel |            "path" => "/usr/share/logstash/input/number2.log"
logstash_one_channel | }

เบเบดเปˆเบ‡เปƒเบซเบเปˆ! เป„เบŸเบฅเปŒเป„เบ”เป‰เบ–เบทเบเป€เบเบฑเบšเบ‚เบถเป‰เบ™, เป€เบชเบฑเป‰เบ™เบ—เบฒเบ‡เป„เบ”เป‰เบ–เบทเบเบฅเบฐเบšเบธเบขเปˆเบฒเบ‡เบ–เบทเบเบ•เป‰เบญเบ‡, เบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เปเบกเปˆเบ™เบ”เบต.

เบขเบธเบ” logstash เปเบฅเบฐเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบญเบตเบเป€เบ—เบทเปˆเบญเบซเบ™เบถเปˆเบ‡. เปƒเบซเป‰เบฅเปเบ–เป‰เบฒ. เบ„เบงเบฒเบกเบ‡เบฝเบš. เป€เบซเบผเบปเปˆเบฒเบ™เบฑเป‰เบ™. เบžเบงเบเป€เบฎเบปเบฒเบšเปเปˆเป„เบ”เป‰เบฎเบฑเบšเบšเบฑเบ™เบ—เบถเบเป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เบญเบตเบเป€เบ—เบทเปˆเบญเบซเบ™เบถเปˆเบ‡.

เปเบฅเบฐเปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เบเบฒเบ™เบ—เบปเบ”เบฅเบญเบ‡ daring เบ—เบตเปˆเบชเบธเบ”.

เบ•เบดเบ”เบ•เบฑเป‰เบ‡ logstash เปเบฅเบฐเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™:

echo '3' >> logs/number2.log
echo '4' >> logs/number1.log

เปเบฅเปˆเบ™ logstash เบญเบตเบเป€เบ—เบทเปˆเบญเบซเบ™เบถเปˆเบ‡เปเบฅเบฐเป€เบšเบดเปˆเบ‡:

logstash_one_channel | {
logstash_one_channel |            "host" => "ac2d4e3ef70f",
logstash_one_channel |     "habra_field" => "Hello Habr",
logstash_one_channel |         "message" => "3",
logstash_one_channel |        "@version" => "1",
logstash_one_channel |            "path" => "/usr/share/logstash/input/number2.log",
logstash_one_channel |      "@timestamp" => 2019-04-29T14:48:50.589Z
logstash_one_channel | }
logstash_one_channel | {
logstash_one_channel |            "host" => "ac2d4e3ef70f",
logstash_one_channel |     "habra_field" => "Hello Habr",
logstash_one_channel |         "message" => "4",
logstash_one_channel |        "@version" => "1",
logstash_one_channel |            "path" => "/usr/share/logstash/input/number1.log",
logstash_one_channel |      "@timestamp" => 2019-04-29T14:48:50.856Z
logstash_one_channel | }

เป‚เบซเป‰เบ! เบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เป„เบ”เป‰เบ–เบทเบเป€เบเบฑเบšเบ‚เบถเป‰เบ™.

เปเบ•เปˆเบžเบงเบเป€เบฎเบปเบฒเบ•เป‰เบญเบ‡เป€เบ•เบทเบญเบ™เบ—เปˆเบฒเบ™เบเปˆเบฝเบงเบเบฑเบšเบชเบดเปˆเบ‡เบ•เปเปˆเป„เบ›เบ™เบตเป‰. เบ–เป‰เบฒเบ•เบปเบงเบšเบฑเบ™เบˆเบธ logstash เบ–เบทเบเบฅเบถเบš (docker เบขเบธเบ” logstash_one_channel && docker rm logstash_one_channel), เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบšเปเปˆเบกเบตเบซเบเบฑเบ‡เบˆเบฐเบ–เบทเบเป€เบเบฑเบšเบ‚เบถเป‰เบ™. เบ•เบณเปเปœเปˆเบ‡เบ‚เบญเบ‡เป„เบŸเบฅเปŒเบ—เบตเปˆเบกเบฑเบ™เบ–เบทเบเบญเปˆเบฒเบ™เบ–เบทเบเป€เบเบฑเบšเป„เบงเป‰เบžเบฒเบเปƒเบ™เบ–เบฑเบ‡. เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบ•เบฑเป‰เบ‡เปเบ•เปˆเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™, เบกเบฑเบ™เบˆเบฐเบเบญเบกเบฎเบฑเบšเบžเบฝเบ‡เปเบ•เปˆเบชเบฒเบเปƒเบซเบกเปˆ.

เบเบณเบฅเบฑเบ‡เบญเปˆเบฒเบ™เป„เบŸเบฅเปŒเบ—เบตเปˆเบกเบตเบขเบนเปˆ

เบชเบปเบกเบกเบธเบ”เบงเปˆเบฒเบžเบงเบเป€เบฎเบปเบฒเบเปเบฒเบฅเบฑเบ‡เป€เบ›เบตเบ”เบ•เบปเบง logstash เป€เบ›เบฑเบ™เบ„เบฑเป‰เบ‡เบ—เปเบฒเบญเบดเบ”, เปเบ•เปˆเบžเบงเบเป€เบฎเบปเบฒเบกเบตเบšเบฑเบ™เบ—เบถเบเปเบฅเป‰เบงเปเบฅเบฐเบžเบงเบเป€เบฎเบปเบฒเบ•เป‰เบญเบ‡เบเบฒเบ™เบ›เบธเบ‡เปเบ•เปˆเบ‡เบžเบงเบเบกเบฑเบ™.
เบ–เป‰เบฒเบžเบงเบเป€เบฎเบปเบฒเปเบฅเปˆเบ™ logstash เบเบฑเบšเบžเบฒเบเบชเปˆเบงเบ™เบ›เป‰เบญเบ™เบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเปƒเบŠเป‰เบ‚เป‰เบฒเบ‡เป€เบ—เบดเบ‡, เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบšเปเปˆเบกเบตเบซเบเบฑเบ‡เป€เบฅเบตเบ. เบžเบฝเบ‡เปเบ•เปˆเป€เบชเบฑเป‰เบ™เปƒเบซเบกเปˆเบˆเบฐเบ–เบทเบเบ›เบฐเบกเบงเบ™เบœเบปเบ™เป‚เบ”เบ logstash.

เป€เบžเบทเปˆเบญเปƒเบซเป‰เป€เบชเบฑเป‰เบ™เบˆเบฒเบเป„เบŸเบฅเปŒเบ—เบตเปˆเบกเบตเบขเบนเปˆเบ–เบทเบเบ”เบถเบ‡เบ‚เบถเป‰เบ™, เบ—เปˆเบฒเบ™เบ„เบงเบ™เป€เบžเบตเปˆเบกเปเบ–เบงเป€เบžเบตเปˆเบกเป€เบ•เบตเบกเปƒเบชเปˆเบžเบฒเบเบชเปˆเบงเบ™เบ›เป‰เบญเบ™เบ‚เปเป‰เบกเบนเบ™:

input {
  file {
    start_position => "beginning"
    path => "/usr/share/logstash/input/*.log"
   }
  }

เบเบดเปˆเบ‡เป„เบ›เบเบงเปˆเบฒเบ™เบฑเป‰เบ™, เบกเบตเบ„เบงเบฒเบกเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™: เบ™เบตเป‰เบžเบฝเบ‡เปเบ•เปˆเบœเบปเบ™เบเบฐเบ—เบปเบšเบ•เปเปˆเป„เบŸเบฅเปŒเปƒเบซเบกเปˆเบ—เบตเปˆ logstash เบเบฑเบ‡เบšเปเปˆเบ—เบฑเบ™เป€เบซเบฑเบ™. เบชเปเบฒเบฅเบฑเบšเป„เบŸเบฅเปŒเบ”เบฝเบงเบเบฑเบ™เบ—เบตเปˆเบขเบนเปˆเปƒเบ™เบžเบฒเบเบชเบฐเบซเบ™เบฒเบกเบ‚เบญเบ‡ view of logstash, เบกเบฑเบ™เบˆเบทเปˆเบ‚เบฐเบซเบ™เบฒเบ”เบ‚เบญเบ‡เป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒเปเบฅเป‰เบงเปเบฅเบฐเปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เบˆเบฐเป€เบญเบปเบฒเบžเบฝเบ‡เปเบ•เปˆเบฅเบฒเบเบเบฒเบ™เปƒเบซเบกเปˆเปƒเบ™เบžเบงเบเบกเบฑเบ™.

เปƒเบซเป‰เบขเบธเบ”เบขเบนเปˆเบ—เบตเปˆเบ™เบตเป‰เปเบฅเบฐเบชเบถเบเบชเบฒเบžเบฒเบเบ›เป‰เบญเบ™เบ‚เปเป‰เบกเบนเบ™. เบเบฑเบ‡เบกเบตเบซเบผเบฒเบเบ—เบฒเบ‡เป€เบฅเบทเบญเบ, เปเบ•เปˆเบกเบฑเบ™เบžเบฝเบ‡เบžเปเบชเปเบฒเบฅเบฑเบšเบžเบงเบเป€เบฎเบปเบฒเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ—เบปเบ”เบฅเบญเบ‡เบ•เปเปˆเป„เบ›เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™.

เบเบฒเบ™เบ›เปˆเบฝเบ™เป€เบชเบฑเป‰เบ™เบ—เบฒเบ‡ เปเบฅเบฐเบ‚เปเป‰เบกเบนเบ™

เปƒเบซเป‰เบžเบฐเบเบฒเบเบฒเบกเปเบเป‰เป„เบ‚เบšเบฑเบ™เบซเบฒเบ•เปเปˆเป„เบ›เบ™เบตเป‰, เปƒเบซเป‰เป€เบงเบปเป‰เบฒเบงเปˆเบฒเบžเบงเบเป€เบฎเบปเบฒเบกเบตเบ‚เปเป‰เบ„เบงเบฒเบกเบˆเบฒเบเบŠเปˆเบญเบ‡เบ—เบฒเบ‡เบซเบ™เบถเปˆเบ‡, เบšเบฒเบ‡เบชเปˆเบงเบ™เบ‚เบญเบ‡เบกเบฑเบ™เป€เบ›เบฑเบ™เบ‚เปเป‰เบกเบนเบ™, เปเบฅเบฐเบšเบฒเบ‡เบ‚เปเป‰เบ„เบงเบฒเบกเปเบกเปˆเบ™เบ„เบงเบฒเบกเบœเบดเบ”เบžเบฒเบ”. เบžเบงเบเป€เบ‚เบปเบฒเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™เป‚เบ”เบเปเบ—เบฑเบ. เบšเบฒเบ‡เบญเบฑเบ™เปเบกเปˆเบ™ INFO, เบšเบฒเบ‡เบญเบฑเบ™เปเบกเปˆเบ™เบœเบดเบ”เบžเบฒเบ”.

เบžเบงเบเป€เบฎเบปเบฒเบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เป„เบ”เป‰เปเบเบเป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒเบขเบนเปˆเบ—เบฒเบ‡เบญเบญเบ. เป€เบซเบผเบปเปˆเบฒเบ™เบฑเป‰เบ™. เบžเบงเบโ€‹เป€เบฎเบปเบฒโ€‹เบ‚เบฝเบ™โ€‹เบ‚เปเป‰โ€‹เบ„เบงเบฒเบกโ€‹เบ‚เปเป‰โ€‹เบกเบนเบ™โ€‹เบ‚เปˆเบฒเบงโ€‹เบชเบฒเบ™โ€‹เบขเบนเปˆโ€‹เปƒเบ™โ€‹เบŠเปˆเบญเบ‡โ€‹เบ—เบฒเบ‡โ€‹เบซเบ™เบถเปˆเบ‡โ€‹, เปเบฅเบฐโ€‹เบ‚เปเป‰โ€‹เบ„เบงเบฒเบกโ€‹เบœเบดเบ”โ€‹เบžเบฒเบ”โ€‹เปƒเบ™โ€‹เบญเบตเบโ€‹.

เป€เบžเบทเปˆเบญเป€เบฎเบฑเบ”เบชเบดเปˆเบ‡เบ™เบตเป‰, เบเป‰เบฒเบเบˆเบฒเบเบžเบฒเบเบชเปˆเบงเบ™เบ›เป‰เบญเบ™เป€เบ‚เบปเป‰เบฒเป„เบ›เบซเบฒเบเบฒเบ™เบเบฑเปˆเบ™เบ•เบญเบ‡เปเบฅเบฐเบœเบปเบ™เบœเบฐเบฅเบดเบ”.

เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบžเบฒเบเบชเปˆเบงเบ™เบเบฒเบ™เบเบฑเปˆเบ™เบ•เบญเบ‡, เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบงเบดเป€เบ„เบฒเบฐเบ‚เปเป‰เบ„เบงเบฒเบกเบ—เบตเปˆเป€เบ‚เบปเป‰เบฒเบกเบฒ, เป„เบ”เป‰เบฎเบฑเบš hash (เบ„เบนเปˆเบ—เบตเปˆเบชเปเบฒเบ„เบฑเบ™) เบˆเบฒเบเบกเบฑเบ™, เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เบงเบฝเบเป„เบ”เป‰เปเบฅเป‰เบง, i.e. disassemble เบ•เบฒเบกเป€เบ‡เบทเปˆเบญเบ™เป„เบ‚. เปเบฅเบฐเปƒเบ™เบžเบฒเบเบœเบปเบ™เบœเบฐเบฅเบดเบ”, เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเป€เบฅเบทเบญเบเบ‚เปเป‰เบ„เบงเบฒเบกเปเบฅเบฐเบชเบปเปˆเบ‡เปเบ•เปˆเบฅเบฐเบ„เบปเบ™เป„เบ›เบซเบฒเบŠเปˆเบญเบ‡เบ—เบฒเบ‡เบ‚เบญเบ‡เบ•เบปเบ™เป€เบญเบ‡.

เบงเบดเป€เบ„เบฒเบฐเบ‚เปเป‰เบ„เบงเบฒเบกเบ”เป‰เบงเบ grok

เป€เบžเบทเปˆเบญเปเบเบเบชเบฒเบเบ‚เปเป‰เบ„เบงเบฒเบกเปเบฅเบฐเป„เบ”เป‰เบฎเบฑเบšเบŠเบธเบ”เบ‚เบญเบ‡เบžเบฒเบเบชเบฐเบซเบ™เบฒเบกเบˆเบฒเบเบžเบงเบเป€เบ‚เบปเบฒ, เบกเบต plugin เบžเบดเป€เบชเบ”เปƒเบ™เบžเบฒเบเบเบฒเบ™เบเบฑเปˆเบ™เบ•เบญเบ‡ - grok .

เป‚เบ”เบเบšเปเปˆเบ•เบฑเป‰เบ‡เป€เบ›เบปเป‰เบฒเบซเบกเบฒเบเปƒเบซเป‰เบ•เบปเบ™เป€เบญเบ‡เบกเบตเบฅเบฒเบเบฅเบฐเบญเบฝเบ”เบเปˆเบฝเบงเบเบฑเบšเบกเบฑเบ™เบขเบนเปˆเบ—เบตเปˆเบ™เบตเป‰ (เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ™เบตเป‰เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบญเป‰เบฒเบ‡เป€เบ–เบดเบ‡ เป€เบญเบเบฐเบชเบฒเบ™เบ—เบฒเบ‡เบเบฒเบ™), เบ‚เป‰เบญเบเบˆเบฐเบเบปเบเบ•เบปเบงเบขเปˆเบฒเบ‡เบ‡เปˆเบฒเบเป†เบ‚เบญเบ‡เบ‚เป‰เบญเบ.

เป€เบžเบทเปˆเบญเป€เบฎเบฑเบ”เบชเบดเปˆเบ‡เบ™เบตเป‰, เบ—เปˆเบฒเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบ•เบฑเบ”เบชเบดเบ™เปƒเบˆเบเปˆเบฝเบงเบเบฑเบšเบฎเบนเบšเปเบšเบšเบ‚เบญเบ‡เบชเบฒเบเป€เบ‚เบปเป‰เบฒ. เบ‚เป‰เบญเบเบกเบตเบžเบงเบเบกเบฑเบ™เปเบšเบšเบ™เบตเป‰:

1 เบ‚เปเป‰โ€‹เบกเบนเบ™โ€‹เบ‚เปˆเบฒเบงโ€‹เบชเบฒเบ™1
2 เบ‚เปเป‰โ€‹เบ„เบงเบฒเบกโ€‹เบœเบดเบ”โ€‹เบžเบฒเบ”2

เป€เบซเบผเบปเปˆเบฒเบ™เบฑเป‰เบ™. เบ•เบปเบงเบฅเบฐเบšเบธเบกเบฒเบเปˆเบญเบ™, เบˆเบฒเบเบ™เบฑเป‰เบ™ INFO/Error, เบˆเบฒเบเบ™เบฑเป‰เบ™เบšเบฒเบ‡เบ„เบณเบ—เบตเปˆเบšเปเปˆเบกเบตเบŠเปˆเบญเบ‡เบซเบงเปˆเบฒเบ‡.
เบกเบฑเบ™เบšเปเปˆเบเบฒเบ, เปเบ•เปˆเบกเบฑเบ™เบžเบฝเบ‡เบžเปเบ—เบตเปˆเบˆเบฐเป€เบ‚เบปเป‰เบฒเปƒเบˆเบซเบผเบฑเบเบเบฒเบ™เบ‚เบญเบ‡เบเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบ‡เบฒเบ™.

เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เปƒเบ™เบชเปˆเบงเบ™เบเบฒเบ™เบเบฑเปˆเบ™เบ•เบญเบ‡เบ‚เบญเบ‡ plugin grok, เบžเบงเบเป€เบฎเบปเบฒเบ•เป‰เบญเบ‡เบเปเบฒเบ™เบปเบ”เบฎเบนเบšเปเบšเบšเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เปเบเบเบชเบฒเบเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ.

เบกเบฑเบ™เบˆเบฐเบกเบตเบฅเบฑเบเบชเบฐเบ™เบฐเบ™เบตเป‰:

filter {
  grok {
    match => { "message" => ["%{INT:message_id} %{LOGLEVEL:message_type} %{WORD:message_text}"] }
   }
  } 

เป‚เบ”เบเบžเบทเป‰เบ™เบ–เบฒเบ™เปเบฅเป‰เบงเบกเบฑเบ™เป€เบ›เบฑเบ™เบเบฒเบ™เบชเบฐเปเบ”เบ‡เบญเบญเบเบ›เบปเบเบเบฐเบ•เบด. เบฎเบนเบšเปเบšเบšเบ—เบตเปˆเป€เบฎเบฑเบ”เปเบฅเป‰เบงเปเบกเปˆเบ™เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰, เป€เบŠเบฑเปˆเบ™: INT, LOGLEVEL, WORD. เบ„เปเบฒเบญเบฐเบ—เบดเบšเบฒเบเบ‚เบญเบ‡เป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒ, เป€เบŠเบฑเปˆเบ™เบ”เบฝเบงเบเบฑเบ™เบเบฑเบšเบฎเบนเบšเปเบšเบšเบญเบทเปˆเบ™เป†, เบชเบฒเบกเบฒเบ”เบžเบปเบšเป„เบ”เป‰เบ—เบตเปˆเบ™เบตเป‰ เบ—เบตเปˆเบ™เบตเป‰

เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™, เบœเปˆเบฒเบ™เบเบฒเบ™เบเบฑเปˆเบ™เบ•เบญเบ‡เบ™เบตเป‰, เบชเบฐเบ•เบดเบ‡เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบ›เปˆเบฝเบ™เป€เบ›เบฑเบ™ hash เบ‚เบญเบ‡เบชเบฒเบกเบŠเปˆเบญเบ‡เบ‚เปเป‰เบกเบนเบ™: message_id, message_type, message_text.

เบžเบงเบเป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒเบˆเบฐเบ–เบทเบเบชเบฐเปเบ”เบ‡เบขเบนเปˆเปƒเบ™เบžเบฒเบเบœเบปเบ™เบœเบฐเบฅเบดเบ”.

เบเปเบฒเบ™เบปเบ”เป€เบชเบฑเป‰เบ™เบ—เบฒเบ‡เบ‚เปเป‰เบ„เบงเบฒเบกเป„เบ›เบซเบฒเบžเบฒเบเบœเบปเบ™เบœเบฐเบฅเบดเบ”เป‚เบ”เบเปƒเบŠเป‰เบ„เปเบฒเบชเบฑเปˆเบ‡ if

เปƒเบ™เบžเบฒเบเบœเบปเบ™เบœเบฐเบฅเบดเบ”, เบ”เบฑเปˆเบ‡เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบˆเบทเปˆ, เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเปเบเบเบ‚เปเป‰เบ„เบงเบฒเบกเบญเบญเบเป€เบ›เบฑเบ™เบชเบญเบ‡เบชเบฒเบ. เบšเบฒเบ‡เบขเปˆเบฒเบ‡ - เป€เบŠเบดเปˆเบ‡เปเบกเปˆเบ™ iNFO, เบˆเบฐเบ–เบทเบเบชเบปเปˆเบ‡เบญเบญเบเป„เบ›เบซเบฒ console, เปเบฅเบฐเบกเบตเบ‚เปเป‰เบœเบดเบ”เบžเบฒเบ”, เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบชเบปเปˆเบ‡เบญเบญเบเป„เบ›เบซเบฒเป„เบŸเบฅเปŒ.

เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเปเบเบเบ‚เปเป‰เบ„เบงเบฒเบกเป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เปเบ™เบงเปƒเบ”? เป€เบ‡เบทเปˆเบญเบ™เป„เบ‚เบ‚เบญเบ‡เบšเบฑเบ™เบซเบฒเป„เบ”เป‰เปเบ™เบฐเบ™เปเบฒเบเบฒเบ™เปเบเป‰เป„เบ‚ - เบซเบผเบฑเบ‡เบˆเบฒเบเบ—เบตเปˆเบ—เบฑเบ‡เบซเบกเบปเบ”, เบžเบงเบเป€เบฎเบปเบฒเบกเบตเบŠเปˆเบญเบ‡เบ‚เปเป‰เบ„เบงเบฒเบกเบ—เบตเปˆเบญเบธเบ—เบดเบ”เบ•เบปเบ™เปเบฅเป‰เบง, เป€เบŠเบดเปˆเบ‡เบชเบฒเบกเบฒเบ”เป€เบญเบปเบฒเบชเบญเบ‡เบ„เปˆเบฒเป€เบ—เบปเปˆเบฒเบ™เบฑเป‰เบ™: 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

เป€เบžเบตเปˆเบกเบ„เบงเบฒเบกเบ„เบดเบ”เป€เบซเบฑเบ™