ELK เชจเซ€ เชชเซเชฐเชพเชฏเซ‹เช—เชฟเช• เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ. เชฒเซ‹เช—เชธเซเชŸเซ‡เชถ เชธเซ‡เชŸ เช•เชฐเซ€ เชฐเชนเซเชฏเซเช‚ เช›เซ‡

เชชเชฐเชฟเชšเชฏ

เชฌเซ€เชœเซ€ เชธเชฟเชธเซเชŸเชฎ เช—เซ‹เช เชตเชคเซ€ เชตเช–เชคเซ‡, เช…เชฎเชจเซ‡ เชฎเซ‹เชŸเซ€ เชธเช‚เช–เซเชฏเชพเชฎเชพเช‚ เชตเชฟเชตเชฟเชง เชฒเซ‹เช— เชชเชฐ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพ เช•เชฐเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐเชฟเชฏเชพเชคเชจเซ‹ เชธเชพเชฎเชจเซ‹ เช•เชฐเชตเซ‹ เชชเชกเซเชฏเซ‹. ELK เชจเซ‡ เชธเชพเชงเชจ เชคเชฐเซ€เช•เซ‡ เชชเชธเช‚เชฆ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเซเช‚ เชนเชคเซเช‚. เช† เชฒเซ‡เช– เช† เชธเซเชŸเซ‡เช• เชธเซ‡เชŸ เช•เชฐเชตเชพเชจเชพ เช…เชฎเชพเชฐเชพ เช…เชจเซเชญเชต เชตเชฟเชถเซ‡ เชตเชพเชค เช•เชฐเชถเซ‡.

เช…เชฎเซ‡ เชคเซ‡เชจเซ€ เชคเชฎเชพเชฎ เช•เซเชทเชฎเชคเชพเช“เชจเซเช‚ เชตเชฐเซเชฃเชจ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เช•เซ‹เชˆ เชงเซเชฏเซ‡เชฏ เชจเช•เซเช•เซ€ เช•เชฐเชคเชพ เชจเชฅเซ€, เชชเชฐเช‚เชคเซ เช…เชฎเซ‡ เชตเซเชฏเชตเชนเชพเชฐเชฟเช• เชธเชฎเชธเซเชฏเชพเช“เชจเชพ เช‰เช•เซ‡เชฒ เชชเชฐ เชงเซเชฏเชพเชจ เช•เซ‡เชจเซเชฆเซเชฐเชฟเชค เช•เชฐเชตเชพ เชฎเชพเช‚เช—เซ€เช เช›เซ€เช. เช† เชคเซ‡ เชนเช•เซ€เช•เชคเชจเซ‡ เช•เชพเชฐเชฃเซ‡ เช›เซ‡ เช•เซ‡ เชชเซ‚เชฐเชคเชพ เชชเซเชฐเชฎเชพเชฃเชฎเชพเช‚ เชฎเซ‹เชŸเซ€ เชฎเชพเชคเซเชฐเชพเชฎเชพเช‚ เชฆเชธเซเชคเชพเชตเซ‡เชœเซ€เช•เชฐเชฃ เช…เชจเซ‡ เชคเซˆเชฏเชพเชฐ เช›เชฌเซ€เช“ เชธเชพเชฅเซ‡, เชคเซเชฏเชพเช‚ เช˜เชฃเซ€ เชฌเชงเซ€ เชฎเซเชถเซเช•เซ‡เชฒเซ€เช“ เช›เซ‡, เช“เช›เชพเชฎเชพเช‚ เช“เช›เซ€ เช…เชฎเชจเซ‡ เชคเซ‡ เชฎเชณเซ€.

เช…เชฎเซ‡ เชกเซ‹เช•เชฐ-เช•เช‚เชชเซ‹เช เชฆเซเชตเชพเชฐเชพ เชธเซเชŸเซ‡เช• เชœเชฎเชพเชตเซเชฏเซเช‚. เชตเชงเซเชฎเชพเช‚, เช…เชฎเชพเชฐเซ€ เชชเชพเชธเซ‡ เชธเชพเชฐเซ€ เชฐเซ€เชคเซ‡ เชฒเช–เชพเชฏเซ‡เชฒ docker-compose.yml เชนเชคเซเช‚ เชœเซ‡เชฃเซ‡ เช…เชฎเชจเซ‡ เชฒเช—เชญเช— เช•เซ‹เชˆ เชธเชฎเชธเซเชฏเชพ เชตเชฟเชจเชพ เชธเซเชŸเซ‡เช• เชตเชงเชพเชฐเชตเชพเชจเซ€ เชฎเช‚เชœเซ‚เชฐเซ€ เช†เชชเซ€ เชนเชคเซ€. เช…เชจเซ‡ เช…เชฎเชจเซ‡ เชเชตเซเช‚ เชฒเชพเช—เชคเซเช‚ เชนเชคเซเช‚ เช•เซ‡ เชตเชฟเชœเชฏ เชชเชนเซ‡เชฒเซ‡เชฅเซ€ เชœ เชจเชœเซ€เช• เช›เซ‡, เชนเชตเซ‡ เช…เชฎเซ‡ เช…เชฎเชพเชฐเซ€ เชœเชฐเซ‚เชฐเชฟเชฏเชพเชคเซ‹เชจเซ‡ เช…เชจเซเชฐเซ‚เชช เชฅเชตเชพ เชฎเชพเชŸเซ‡ เชคเซ‡เชจเซ‡ เชฅเซ‹เชกเซเช‚ เชŸเซเชตเชฟเชธเซเชŸ เช•เชฐเซ€เชถเซเช‚ เช…เชจเซ‡ เชฌเชธ.

เช•เชฎเชจเชธเซ€เชฌเซ‡, เช…เชฎเชพเชฐเซ€ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจเชฎเชพเช‚เชฅเซ€ เชฒเซ‹เช— เชฎเซ‡เชณเชตเชตเชพ เช…เชจเซ‡ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชธเชฟเชธเซเชŸเชฎเชจเซ‡ เชŸเซเชฏเซเชจ เช•เชฐเชตเชพเชจเซ‹ เชชเซเชฐเชฏเชพเชธ เชคเชฐเชค เชœ เชธเชซเชณ เชฅเชฏเซ‹ เชจ เชนเชคเซ‹. เชคเซ‡เชฅเซ€, เช…เชฎเซ‡ เชจเช•เซเช•เซ€ เช•เชฐเซเชฏเซเช‚ เช•เซ‡ เชคเซ‡ เชฆเชฐเซ‡เช• เช˜เชŸเช•เชจเซ‹ เช…เชฒเช—เชฅเซ€ เช…เชญเซเชฏเชพเชธ เช•เชฐเชตเชพ เชฏเซ‹เช—เซเชฏ เช›เซ‡, เช…เชจเซ‡ เชชเช›เซ€ เชคเซ‡เชฎเชจเชพ เชœเซ‹เชกเชพเชฃเซ‹ เชชเชฐ เชชเชพเช›เชพ เชซเชฐเซ‹.

เชคเซ‹ เชšเชพเชฒเซ‹ เชฒเซ‹เช—เชธเซเชŸเซ‡เชถ เชธเชพเชฅเซ‡ เชถเชฐเซ‚เช†เชค เช•เชฐเซ€เช.

เชชเชฐเซเชฏเชพเชตเชฐเชฃ, เชœเชฎเชพเชตเชŸ, เช•เชจเซเชŸเซ‡เชจเชฐเชฎเชพเช‚ เชฒเซ‹เช—เชธเซเชŸเซ‡เชถ เชšเชฒเชพเชตเชตเซเช‚

เชœเชฎเชพเชตเชŸ เชฎเชพเชŸเซ‡, เช…เชฎเซ‡ เชกเซ‹เช•เชฐ-เช•เช‚เชชเซ‹เชเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เช เช›เซ€เช, เช…เชนเซ€เช‚ เชตเชฐเซเชฃเชตเซ‡เชฒ เชชเซเชฐเชฏเซ‹เช—เซ‹ MacOS เช…เชจเซ‡ Ubuntu 18.0.4 เชชเชฐ เชนเชพเชฅ เชงเชฐเชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเชพ เชนเชคเชพ.

เช…เชฎเชพเชฐเซ€ เชฎเซ‚เชณ docker-compose.yml เชฎเชพเช‚ เชœเซ‡ เชฒเซ‹เช—เชธเซเชŸเซ‡เชถ เช›เชฌเซ€ เชนเชคเซ€ เชคเซ‡ เช›เซ‡ docker.elastic.co/logstash/logstash:6.3.2

เช…เชฎเซ‡ เชชเซเชฐเชฏเซ‹เช—เซ‹ เชฎเชพเชŸเซ‡ เชคเซ‡เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชถเซเช‚.

logstash เชšเชฒเชพเชตเชตเชพ เชฎเชพเชŸเซ‡, เช…เชฎเซ‡ เชเช• เช…เชฒเช— docker-compose.yml เชฒเช–เซเชฏเซเช‚ เช›เซ‡. เช…เชฒเชฌเชคเซเชค, เช•เชฎเชพเชจเซเชก เชฒเชพเช‡เชจเชฅเซ€ เช‡เชฎเซ‡เชœ เชฒเซ‹เช‚เชš เช•เชฐเชตเชพเชจเซเช‚ เชถเช•เซเชฏ เชนเชคเซเช‚, เชชเชฐเช‚เชคเซ เช›เซ‡เชตเชŸเซ‡, เช…เชฎเซ‡ เชเช• เชšเซ‹เช•เซเช•เชธ เช•เชพเชฐเซเชฏ เชนเชฒ เช•เชฐเซเชฏเซเช‚, เชœเซเชฏเชพเช‚ เชกเซ‹เช•เชฐ-เช•เช‚เชชเซ‹เชเชฅเซ€ เชฌเชงเซเช‚ เช…เชฎเชพเชฐเชพ เชฎเชพเชŸเซ‡ เชฒเซ‹เชจเซเชš เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเซเช‚ เช›เซ‡.

เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เชซเชพเช‡เชฒเซ‹ เชตเชฟเชถเซ‡ เชธเช‚เช•เซเชทเชฟเชชเซเชคเชฎเชพเช‚

เชตเชฐเซเชฃเชจเชฎเชพเช‚เชฅเซ€ เชจเซ€เชšเซ‡ เชฎเซเชœเชฌ, logstash เชเช• เชšเซ‡เชจเชฒ เชฎเชพเชŸเซ‡ เชšเชฒเชพเชตเซ€ เชถเช•เชพเชฏ เช›เซ‡, เช† เช•เชฟเชธเซเชธเชพเชฎเชพเช‚, เชคเซ‡เชจเซ‡ *.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 เชจเซ€ เชชเซเชฐเชพเชฏเซ‹เช—เชฟเช• เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ. เชฒเซ‹เช—เชธเซเชŸเซ‡เชถ เชธเซ‡เชŸ เช•เชฐเซ€ เชฐเชนเซเชฏเซเช‚ เช›เซ‡

piping.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 ::เชฐเชฟเชเซ‹เชฒเซเชฏเซเชถเชจ เชจเชฟเชทเซเชซเชณเชคเชพ]เชธเซเชฅเชฟเชคเชฟเชธเซเชฅเชพเชชเช• เชถเซ‹เชง", ...

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 เชเชจเซเชกเชชเซ‹เช‡เชจเซเชŸ {: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:]ResolutionFail เชธเซเชฅเชฟเชคเชฟเชธเซเชฅเชพเชชเช• เชถเซ‹เชง"}
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:]ResolutionFail เชธเซเชฅเชฟเชคเชฟเชธเซเชฅเชพเชชเช• เชถเซ‹เชง"}

เช…เชจเซ‡ เช…เชฎเชพเชฐเซ‹ เชฒเซ‹เช— เชฆเชฐเซ‡เช• เชธเชฎเชฏเซ‡ เช•เซเชฐเซ‹เชฒ เชฅเชพเชฏ เช›เซ‡.

เช…เชนเซ€เช‚ เชฎเซ‡เช‚ เชฒเซ€เชฒเชพ เชฐเช‚เช—เชฎเชพเช‚ เชธเช‚เชฆเซ‡เชถ เชชเซเชฐเช•เชพเชถเชฟเชค เช•เชฐเซเชฏเซ‹ เช›เซ‡ เช•เซ‡ เชชเชพเช‡เชชเชฒเชพเช‡เชจ เชธเชซเชณเชคเชพเชชเซ‚เชฐเซเชตเช• เชถเชฐเซ‚ เชฅเชˆ เช›เซ‡, เชฒเชพเชฒ เชฐเช‚เช—เชฎเชพเช‚ เชญเซ‚เชฒ เชธเช‚เชฆเซ‡เชถ เช…เชจเซ‡ เชชเซ€เชณเชพ เชฐเช‚เช—เชฎเชพเช‚ เชธเช‚เชชเชฐเซเช• เช•เชฐเชตเชพเชจเซ‹ เชชเซเชฐเชฏเชพเชธ เช•เชฐเชตเชพเชจเซ‹ เชธเช‚เชฆเซ‡เชถ เชธเซเชฅเชฟเชคเชฟเชธเซเชฅเชพเชชเช•: 9200
เช† เช เชนเช•เซ€เช•เชคเชจเซ‡ เช•เชพเชฐเชฃเซ‡ เชฅเชพเชฏ เช›เซ‡ เช•เซ‡ เชˆเชฎเซ‡เชœเชฎเชพเช‚ เชธเชฎเชพเชตเชฟเชทเซเชŸ logstash.conf เชฎเชพเช‚, elasticsearchเชจเซ€ เช‰เชชเชฒเชฌเซเชงเชคเชพ เชฎเชพเชŸเซ‡ เชคเชชเชพเชธ เช›เซ‡. เช›เซ‡เชตเชŸเซ‡, logstash เชงเชพเชฐเซ‡ เช›เซ‡ เช•เซ‡ เชคเซ‡ เชเชฒเซเช• เชธเซเชŸเซ‡เช•เชจเชพ เชญเชพเช— เชฐเซ‚เชชเซ‡ เช•เชพเชฎ เช•เชฐเซ‡ เช›เซ‡, เช…เชจเซ‡ เช…เชฎเซ‡ เชคเซ‡เชจเซ‡ เช…เชฒเช— เช•เชฐเซ€ เชฆเซ€เชงเซเช‚.

เชคเชฎเซ‡ เช•เชพเชฎ เช•เชฐเซ€ เชถเช•เซ‹ เช›เซ‹, เชชเชฐเช‚เชคเซ เชคเซ‡ เช…เชจเซเช•เซ‚เชณ เชจเชฅเซ€.

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 | }

เช…เชฎเซ‡ เชตเชงเซ เชตเช–เชค เชชเซเชฐเชพเชชเซเชค เช•เชฐเชตเชพ เชฎเชพเช‚เช—เซ€เช เช›เซ€เช, เช…เชฎเชพเชฐเซ‡ เช…เช‚เชคเชฐเชพเชฒ เชชเชฐเชฟเชฎเชพเชฃ เช‰เชฎเซ‡เชฐเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡.
เช† เชฐเซ€เชคเซ‡ เช…เชฎเชจเซ‡ เชฆเชฐ 10 เชธเซ‡เช•เชจเซเชกเซ‡ เชเช• เชธเช‚เชฆเซ‡เชถ เชชเซเชฐเชพเชชเซเชค เชฅเชถเซ‡.

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_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_one_channel && docker rm logstash_one_channel), เช•เช‚เชˆเชชเชฃ เชฒเซ‡เชตเชพเชฎเชพเช‚ เช†เชตเชถเซ‡ เชจเชนเซ€เช‚. เชซเชพเช‡เชฒเชจเซ€ เชธเซเชฅเชฟเชคเชฟ เช•เซ‡ เชœเซเชฏเชพเช‚ เชธเซเชงเซ€ เชคเซ‡ เชตเชพเช‚เชšเชตเชพเชฎเชพเช‚ เช†เชตเซ€ เชนเชคเซ€ เชคเซ‡ เช•เชจเซเชŸเซ‡เชจเชฐเชจเซ€ เช…เช‚เชฆเชฐ เชธเช‚เช—เซเชฐเชนเชฟเชค เชนเชคเซ€. เชœเซ‹ เชคเชฎเซ‡ เชถเชฐเซ‚เช†เชคเชฅเซ€ เชถเชฐเซ‚ เช•เชฐเซ‹ เช›เซ‹, เชคเซ‹ เชคเซ‡ เชซเช•เซเชค เชจเชตเซ€ เชฒเชพเช‡เชจ เชธเซเชตเซ€เช•เชพเชฐเชถเซ‡.

เชนเชพเชฒเชจเซ€ เชซเชพเช‡เชฒเซ‹ เชตเชพเช‚เชšเซ€ เชฐเชนเซเชฏเชพ เช›เซ€เช

เชšเชพเชฒเซ‹ เช•เชนเซ€เช เช•เซ‡ เช…เชฎเซ‡ เชชเซเชฐเชฅเชฎ เชตเช–เชค เชฒเซ‹เช—เชธเซเชŸเซ‡เชถ เชšเชฒเชพเชตเซ€ เชฐเชนเซเชฏเชพ เช›เซ€เช, เชชเชฐเช‚เชคเซ เช…เชฎเชพเชฐเซ€ เชชเชพเชธเซ‡ เชชเชนเซ‡เชฒเซ‡เชฅเซ€ เชœ เชฒเซ‹เช— เช›เซ‡ เช…เชจเซ‡ เช…เชฎเซ‡ เชคเซ‡เชจเซ‡ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพ เช•เชฐเชตเชพ เชฎเชพเช‚เช—เซ€เช เช›เซ€เช.
เชœเซ‹ เช†เชชเชฃเซ‡ เช‰เชชเชฐ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ‡เชฒ เช‡เชจเชชเซเชŸ เชตเชฟเชญเชพเช— เชธเชพเชฅเซ‡ เชฒเซ‹เช—เชธเซเชŸเซ‡เชถ เชšเชฒเชพเชตเซ€เช, เชคเซ‹ เช†เชชเชฃเชจเซ‡ เช•เช‚เชˆเชชเชฃ เชฎเชณเชถเซ‡ เชจเชนเซ€เช‚. เชฒเซ‹เช—เชธเซเชŸเซ‡เชถ เชฆเซเชตเชพเชฐเชพ เชซเช•เซเชค เชจเชตเซ€ เชฒเชพเช‡เชจ เชชเชฐ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเชถเซ‡.

เชนเชพเชฒเชจเซ€ เชซเชพเช‡เชฒเซ‹เชฎเชพเช‚เชฅเซ€ เชฐเซ‡เช–เชพเช“ เช–เซ‡เช‚เชšเชตเชพ เชฎเชพเชŸเซ‡, เช‡เชจเชชเซเชŸ เชตเชฟเชญเชพเช—เชฎเชพเช‚ เชตเชงเชพเชฐเชพเชจเซ€ เชฒเชพเช‡เชจ เช‰เชฎเซ‡เชฐเซ‹:

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

เชคเชฆเซเชชเชฐเชพเช‚เชค, เชคเซเชฏเชพเช‚ เชเช• เชธเซ‚เช•เซเชทเซเชฎเชคเชพ เช›เซ‡, เช† เชซเช•เซเชค เชจเชตเซ€ เชซเชพเช‡เชฒเซ‹เชจเซ‡ เช…เชธเชฐ เช•เชฐเซ‡ เช›เซ‡ เชœเซ‡ เชฒเซ‹เช—เชธเซเชŸเซ‡เชถเซ‡ เชนเชœเซ€ เชธเซเชงเซ€ เชœเซ‹เชˆ เชจเชฅเซ€. เชคเซ‡ เชœ เชซเชพเช‡เชฒเซ‹ เชฎเชพเชŸเซ‡ เช•เซ‡ เชœเซ‡ เชชเชนเซ‡เชฒเชพเชฅเซ€ เชœ เชฒเซ‹เช—เชธเซเชŸเซ‡เชถเชจเชพ เชฆเซƒเชถเซเชฏเชจเชพ เช•เซเชทเซ‡เชคเซเชฐเชฎเชพเช‚ เชนเชคเซ€, เชคเซ‡ เชชเชนเซ‡เชฒเชพเชฅเซ€ เชœ เชคเซ‡เชฎเชจเซเช‚ เช•เชฆ เชฏเชพเชฆ เชฐเชพเช–เซ‡ เช›เซ‡ เช…เชจเซ‡ เชนเชตเซ‡ เชคเซ‡เชฎเชพเช‚ เชซเช•เซเชค เชจเชตเชพ เชฐเซ‡เช•เซ‹เชฐเซเชกเซเชธ เชฒเซ‡เชถเซ‡.

เชšเชพเชฒเซ‹ เช‡เชจเชชเซเชŸ เชตเชฟเชญเชพเช—เชจเซ‹ เช…เชญเซเชฏเชพเชธ เช•เชฐเซ€เชจเซ‡ เช†เชจเชพ เชชเชฐ เช…เชŸเช•เซ€เช. เชคเซเชฏเชพเช‚ เช˜เชฃเชพ เชฌเชงเชพ เชตเชฟเช•เชฒเซเชชเซ‹ เช›เซ‡, เชชเชฐเช‚เชคเซ เชนเชฎเชฃเชพเช‚ เชฎเชพเชŸเซ‡, เช…เชฎเชพเชฐเซ€ เชชเชพเชธเซ‡ เชตเชงเซ เชชเซเชฐเชฏเซ‹เช—เซ‹ เชฎเชพเชŸเซ‡ เชชเซ‚เชฐเชคเชพ เช›เซ‡.

เชฐเซ‚เชŸเซ€เช‚เช— เช…เชจเซ‡ เชกเซ‡เชŸเชพ เชŸเซเชฐเชพเชจเซเชธเชซเซ‹เชฐเซเชฎเซ‡เชถเชจ

เชšเชพเชฒเซ‹ เชจเซ€เชšเซ‡เชจเซ€ เชธเชฎเชธเซเชฏเชพเชจเซ‡ เชนเชฒ เช•เชฐเชตเชพเชจเซ‹ เชชเซเชฐเชฏเชพเชธ เช•เชฐเซ€เช, เชšเชพเชฒเซ‹ เช•เชนเซ€เช เช•เซ‡ เช…เชฎเชพเชฐเซ€ เชชเชพเชธเซ‡ เชเช• เชšเซ‡เชจเชฒเชจเชพ เชธเช‚เชฆเซ‡เชถเชพ เช›เซ‡, เชคเซ‡เชฎเชพเช‚เชฅเซ€ เช•เซ‡เชŸเชฒเชพเช• เชฎเชพเชนเชฟเชคเซ€เชชเซเชฐเชฆ เช›เซ‡, เช…เชจเซ‡ เช•เซ‡เชŸเชฒเชพเช• เชญเซ‚เชฒ เชธเช‚เชฆเซ‡เชถเชพเช“ เช›เซ‡. เชคเซ‡เช“ เชŸเซ‡เช—เชฎเชพเช‚ เช…เชฒเช— เชชเชกเซ‡ เช›เซ‡. เช•เซ‡เชŸเชฒเซ€เช• เชฎเชพเชนเชฟเชคเซ€ เช›เซ‡, เช…เชจเซเชฏ ERROR เช›เซ‡.

เช†เชชเชฃเซ‡ เชคเซ‡เชฎเชจเซ‡ เชฌเชนเชพเชฐ เชจเซ€เช•เชณเชคเซ€ เชตเช–เชคเซ‡ เช…เชฒเช— เช•เชฐเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡. เชคเซ‡. เช…เชฎเซ‡ เชเช• เชšเซ‡เชจเชฒเชฎเชพเช‚ เชฎเชพเชนเชฟเชคเซ€เชชเซเชฐเชฆ เชธเช‚เชฆเซ‡เชถเชพเช“ เช…เชจเซ‡ เชฌเซ€เชœเซ€ เชšเซ‡เชจเชฒเชฎเชพเช‚ เชญเซ‚เชฒ เชธเช‚เชฆเซ‡เชถเชพเช“ เชฒเช–เซ€เช เช›เซ€เช.

เช† เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡, เช‡เชจเชชเซเชŸ เชตเชฟเชญเชพเช—เชฎเชพเช‚เชฅเซ€ เชซเชฟเชฒเซเชŸเชฐ เช…เชจเซ‡ เช†เช‰เชŸเชชเซเชŸ เชชเชฐ เชœเชพเช“.

เชซเชฟเชฒเซเชŸเชฐ เชตเชฟเชญเชพเช—เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡, เช…เชฎเซ‡ เช†เชตเชจเชพเชฐเชพ เชธเช‚เชฆเซ‡เชถเชจเซ‡ เชชเชพเชฐเซเชธ เช•เชฐเซ€เชถเซเช‚, เชคเซ‡เชฎเชพเช‚เชฅเซ€ เชนเซ‡เชถ (เช•เซ€-เชตเซ‡เชฒเซเชฏเซ เชœเซ‹เชกเซ€เช“) เชฎเซ‡เชณเชตเซ€เชถเซเช‚, เชœเซ‡เชจเซ€ เชธเชพเชฅเซ‡ เช†เชชเชฃเซ‡ เชชเชนเซ‡เชฒเซ‡เชฅเซ€ เชœ เช•เชพเชฎ เช•เชฐเซ€ เชถเช•เซ€เช เช›เซ€เช, เชเชŸเชฒเซ‡ เช•เซ‡. เชถเชฐเชคเซ‹ เช…เชจเซเชธเชพเชฐ เชตเชฟเชถเซเชฒเซ‡เชทเชฃ เช•เชฐเซ‹. เช…เชจเซ‡ เช†เช‰เชŸเชชเซเชŸ เชตเชฟเชญเชพเช—เชฎเชพเช‚, เช…เชฎเซ‡ เชธเช‚เชฆเซ‡เชถเชพเช“ เชชเชธเช‚เชฆ เช•เชฐเซ€เชถเซเช‚ เช…เชจเซ‡ เชฆเชฐเซ‡เช•เชจเซ‡ เชคเซ‡เชจเซ€ เชชเซ‹เชคเชพเชจเซ€ เชšเซ‡เชจเชฒ เชชเชฐ เชฎเซ‹เช•เชฒเซ€เชถเซเช‚.

เช—เซเชฐเซ‹เช• เชธเชพเชฅเซ‡ เชธเช‚เชฆเซ‡เชถเชจเซเช‚ เชตเชฟเชถเซเชฒเซ‡เชทเชฃ

เชŸเซ‡เช•เซเชธเซเชŸ เชฒเชพเช‡เชจเซเชธเชจเซ‡ เชชเชพเชฐเซเชธ เช•เชฐเชตเชพ เช…เชจเซ‡ เชคเซ‡เชฎเชพเช‚เชฅเซ€ เชซเซ€เชฒเซเชกเซเชธเชจเซ‹ เชธเชฎเซ‚เชน เชฎเซ‡เชณเชตเชตเชพ เชฎเชพเชŸเซ‡, เชซเชฟเชฒเซเชŸเชฐ เชตเชฟเชญเชพเช—เชฎเชพเช‚ เชเช• เชตเชฟเชถเซ‡เชท เชชเซเชฒเช—เช‡เชจ เช›เซ‡ - grok.

เช…เชนเซ€เช‚ เชคเซ‡เชจเซเช‚ เชตเชฟเช—เชคเชตเชพเชฐ เชตเชฐเซเชฃเชจ เช†เชชเชตเชพเชจเซเช‚ เชฒเช•เซเชทเซเชฏ เชจเช•เซเช•เซ€ เช•เชฐเซเชฏเชพ เชตเชฟเชจเชพ (เช† เชฎเชพเชŸเซ‡ เชนเซเช‚ เชธเช‚เชฆเชฐเซเชญ เชฒเช‰เช‚ เช›เซเช‚ เชธเชคเซเชคเชพเชตเชพเชฐ เชฆเชธเซเชคเชพเชตเซ‡เชœเซ€เช•เชฐเชฃ), เชนเซเช‚ เชฎเชพเชฐเซเช‚ เชธเชฐเชณ เช‰เชฆเชพเชนเชฐเชฃ เช†เชชเซ€เชถ.

เช† เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡, เชคเชฎเชพเชฐเซ‡ เช‡เชจเชชเซเชŸ เชฒเชพเช‡เชจเชจเชพ เชซเซ‹เชฐเซเชฎเซ‡เชŸ เชชเชฐ เชจเชฟเชฐเซเชฃเชฏ เชฒเซ‡เชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡. เชฎเชพเชฐเซ€ เชชเชพเชธเซ‡ เชคเซ‡เช“ เช†เชจเชพ เชœเซ‡เชตเชพ เช›เซ‡:

1 เชฎเชพเชนเชฟเชคเซ€ เชธเช‚เชฆเซ‡เชถ1
2 เชญเซ‚เชฒ เชธเช‚เชฆเซ‡เชถ2

เชคเซ‡. เชชเชนเซ‡เชฒเชพ เช“เชณเช–เช•เชฐเซเชคเชพ, เชชเช›เซ€ INFO/ERROR, เชชเช›เซ€ เช–เชพเชฒเซ€ เชœเช—เซเชฏเชพ เชตเช—เชฐเชจเซ‹ เช…เชฎเซเช• เชถเชฌเซเชฆ.
เชฎเซเชถเซเช•เซ‡เชฒ เชจเชฅเซ€, เชชเชฐเช‚เชคเซ เช“เชชเชฐเซ‡เชถเชจเชจเชพ เชธเชฟเชฆเซเชงเชพเช‚เชคเชจเซ‡ เชธเชฎเชœเชตเชพ เชฎเชพเชŸเซ‡ เชชเซ‚เชฐเชคเซเช‚ เช›เซ‡.

เชคเซ‡เชฅเซ€, เชซเชฟเชฒเซเชŸเชฐ เชตเชฟเชญเชพเช—เชฎเชพเช‚, เช—เซเชฐเซ‹เช• เชชเซเชฒเช—เช‡เชจเชฎเชพเช‚, เช…เชฎเชพเชฐเซ‡ เช…เชฎเชพเชฐเชพ เชถเชฌเซเชฆเชฎเชพเชณเชพเช“เชจเซเช‚ เชชเชฆเชšเซเช›เซ‡เชฆเชจ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชเช• เชชเซ‡เชŸเชฐเซเชจ เชตเซเชฏเชพเช–เซเชฏเชพเชฏเชฟเชค เช•เชฐเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡.

เชคเซ‡ เช†เชจเชพ เชœเซ‡เชตเซ‹ เชฆเซ‡เช–เชพเชถเซ‡:

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

เชเช• เชŸเชฟเชชเซเชชเชฃเซ€ เช‰เชฎเซ‡เชฐเซ‹