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 เจฒเจฟเจ–เจฟเจ† เจนเฉˆเฅค เจฌเฉ‡เจธเจผเฉฑเจ•, เจ•เจฎเจพเจ‚เจก เจฒเจพเจˆเจจ เจคเฉ‹เจ‚ เจšเจฟเฉฑเจคเจฐ เจจเฉ‚เฉฐ เจฒเจพเจ‚เจš เจ•เจฐเจจเจพ เจธเฉฐเจญเจต เจธเฉ€, เจชเจฐ เจ…เจธเฉ€เจ‚ เจ‡เฉฑเจ• เจ–เจพเจธ เจธเจฎเฉฑเจธเจฟเจ† เจจเฉ‚เฉฐ เจนเฉฑเจฒ เจ•เจฐ เจฐเจนเฉ‡ เจธเฉ€, เจœเจฟเฉฑเจฅเฉ‡ เจ…เจธเฉ€เจ‚ เจกเฉŒเจ•เจฐ-เจ•เฉฐเจชเฉ‹เจœเจผ เจคเฉ‹เจ‚ เจธเจญ เจ•เฉเจ เจšเจฒเจพเจ‰เจ‚เจฆเฉ‡ เจนเจพเจ‚เฅค

เจธเฉฐเจฐเจšเจจเจพ เจซเจพเจˆเจฒเจพเจ‚ เจฌเจพเจฐเฉ‡ เจธเฉฐเจ–เฉ‡เจช เจตเจฟเฉฑเจš

เจตเจฐเจฃเจจ เจคเฉ‹เจ‚ เจนเฉ‡เจ เจพเจ‚ เจฆเจฟเฉฑเจคเฉ‡ เจ…เจจเฉเจธเจพเจฐ, เจฒเฉŒเจ—เจธเจŸเฉˆเจธเจผ เจจเฉ‚เฉฐ เจœเจพเจ‚ เจคเจพเจ‚ เจ‡เฉฑเจ• เจšเฉˆเจจเจฒ เจฒเจˆ เจšเจฒเจพเจ‡เจ† เจœเจพ เจธเจ•เจฆเจพ เจนเฉˆ, เจœเจฟเจธ เจธเจฅเจฟเจคเฉ€ เจตเจฟเฉฑเจš เจ‡เจธเจจเฉ‚เฉฐ *.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 เจจเจพเจฒ เจฎเฉˆเจช เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚, เจœเจฟเฉฑเจฅเฉ‡ เจฒเฉŒเจ—เจธเจŸเฉˆเจธเจผ เจ‡เจธเจจเฉ‚เฉฐ เจšเฉเฉฑเจ• เจฒเจตเฉ‡เจ—เจพ เจ…เจคเฉ‡ เจ‡เจธเจจเฉ‚เฉฐ เจธเจฟเจฐเจซเจผ เจชเฉœเฉเจนเจจ เจฒเจˆ เจฌเจฃเจพ เจฆเฉ‡เจตเฉ‡เจ—เจพเฅค
  5. เจ…เจธเฉ€เจ‚ ./config/pipelines เจกเจพเจ‡เจฐเฉˆเจ•เจŸเจฐเฉ€, เจœเจฟเฉฑเจฅเฉ‡ เจธเจพเจกเฉ‡ เจ•เฉ‹เจฒ เจšเฉˆเจจเจฒ เจธเฉˆเจŸเจฟเฉฐเจ—เจพเจ‚ เจตเจพเจฒเฉ€เจ†เจ‚ เจซเจพเจˆเจฒเจพเจ‚ เจนเจจ, เจจเฉ‚เฉฐ /usr/share/logstash/config/pipelines เจกเจพเจ‡เจฐเฉˆเจ•เจŸเจฐเฉ€ เจตเจฟเฉฑเจš เจฎเฉˆเจช เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚ เจ…เจคเฉ‡ เจ‡เจธเจจเฉ‚เฉฐ เจธเจฟเจฐเจซเจผ เจชเฉœเฉเจนเจจ เจฒเจˆ เจตเฉ€ เจฌเจฃเจพเจ‰เจ‚เจฆเฉ‡ เจนเจพเจ‚เฅค

ELK เจฆเฉ€ เจชเฉเจฐเฉˆเจ•เจŸเฉ€เจ•เจฒ เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจ. เจฒเฉŒเจ—เจธเจŸเฉˆเจธเจผ เจธเจฅเจพเจชเจค เจ•เฉ€เจคเจพ เจœเจพ เจฐเจฟเจนเจพ เจนเฉˆ

Pipelines.yml เจซเจพเจˆเจฒ

- pipeline.id: HABR
  pipeline.workers: 1
  pipeline.batch.size: 1
  path.config: "./config/pipelines/habr_pipeline.conf"

HABR เจชเจ›เจพเจฃเจ•เจฐเจคเจพ เจตเจพเจฒเจพ เจ‡เฉฑเจ• เจšเฉˆเจจเจฒ เจ…เจคเฉ‡ เจ‡เจธเจฆเฉ€ เจธเฉฐเจฐเจšเจจเจพ เจซเจพเจ‡เจฒ เจฆเจพ เจฎเจพเจฐเจ— เจ‡เฉฑเจฅเฉ‡ เจฆเฉฑเจธเจฟเจ† เจ—เจฟเจ† เจนเฉˆเฅค

เจ…เจคเฉ‡ เจ…เฉฐเจค เจตเจฟเฉฑเจš เจซเจพเจˆเจฒ โ€œ./config/pipelines/habr_pipeline.confโ€

input {
  tcp {
    port => "5046"
   }
  }
filter {
  mutate {
    add_field => [ "habra_field", "Hello Habr" ]
    }
  }
output {
  stdout {
      
    }
  }

เจšเจฒเฉ‹ เจนเฉเจฃเฉ‡ เจ‡เจธเจฆเฉ‡ เจตเจฐเจฃเจจ เจตเจฟเฉฑเจš เจจเจพ เจœเจพเจˆเจ, เจ†เจ“ เจ‡เจธเจจเฉ‚เฉฐ เจšเจฒเจพเจ‰เจฃ เจฆเฉ€ เจ•เฉ‹เจธเจผเจฟเจธเจผ เจ•เจฐเฉ€เจ:

docker-compose up

เจ…เจธเฉ€เจ‚ เจ•เฉ€ เจฆเฉ‡เจ–เจฆเฉ‡ เจนเจพเจ‚?

เจ•เฉฐเจŸเฉ‡เจจเจฐ เจšเจพเจฒเฉ‚ เจนเฉ‹ เจ—เจฟเจ† เจนเฉˆเฅค เจ…เจธเฉ€เจ‚ เจ‡เจธเจฆเฉ‡ เจ•เจพเจฐเจœ เจฆเฉ€ เจœเจพเจ‚เจš เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเจพเจ‚:

echo '13123123123123123123123213123213' | nc localhost 5046

เจ…เจคเฉ‡ เจ…เจธเฉ€เจ‚ เจ•เฉฐเจŸเฉ‡เจจเจฐ เจ•เฉฐเจธเฉ‹เจฒ เจตเจฟเฉฑเจš เจœเจตเจพเจฌ เจฆเฉ‡เจ–เจฆเฉ‡ เจนเจพเจ‚:

ELK เจฆเฉ€ เจชเฉเจฐเฉˆเจ•เจŸเฉ€เจ•เจฒ เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจ. เจฒเฉŒเจ—เจธเจŸเฉˆเจธเจผ เจธเจฅเจพเจชเจค เจ•เฉ€เจคเจพ เจœเจพ เจฐเจฟเจนเจพ เจนเฉˆ

เจชเจฐ เจ‰เจธเฉ‡ เจธเจฎเฉ‡เจ‚, เจ…เจธเฉ€เจ‚ เจ‡เจน เจตเฉ€ เจฆเฉ‡เจ–เจฆเฉ‡ เจนเจพเจ‚:

logstash_one_channel | [2019-04-29T11:28:59,790][ERROR][logstash.licensechecker.licensereader] เจฒเจพเจ‡เจธเฉฐเจธ เจธเจฐเจตเจฐ เจคเฉ‹เจ‚ เจฒเจพเจ‡เจธเฉฐเจธ เจœเจพเจฃเจ•เจพเจฐเฉ€ เจชเฉเจฐเจพเจชเจค เจ•เจฐเจจ เจตเจฟเฉฑเจš เจ…เจธเจฎเจฐเฉฑเจฅ {:message=>โ€œElasticsearch เจชเจนเฉเฉฐเจšเจฏเฉ‹เจ— เจจเจนเฉ€เจ‚: [http://elasticsearch:9200/][Manticore ::ResolutionFailure] elasticsearch", ...

logstash_one_channel | [2019-04-29T11:28:59,894][INFO ][logstash.pipeline ] เจชเจพเจˆเจชเจฒเจพเจˆเจจ เจธเจซเจฒเจคเจพเจชเฉ‚เจฐเจตเจ• เจธเจผเฉเจฐเฉ‚ เจนเฉ‹เจˆ {:pipeline_id=>".monitoring-logstash", :thread=>"# "}

logstash_one_channel | [2019-04-29T11:28:59,988][INFO ][logstash.agent ] เจšเฉฑเจฒ เจฐเจนเฉ€เจ†เจ‚ เจชเจพเจˆเจชเจฒเจพเจˆเจจเจพเจ‚ {:count=>2, :running_pipelines=>[:HABR, :."monitoring-logstash"], :non_running_pipelines=>[ ]}
logstash_one_channel | [2019-04-29T11:29:00,015][ERROR][logstash.inputs.metrics] X-Pack Logstash 'เจคเฉ‡ เจธเจฅเจพเจชเจค เจนเฉˆ เจชเจฐ Elasticsearch 'เจคเฉ‡ เจจเจนเฉ€เจ‚เฅค เจ•เจฟเจฐเจชเจพ เจ•เจฐเจ•เฉ‡ เจจเจฟเจ—เจฐเจพเจจเฉ€ เจตเจฟเจธเจผเฉ‡เจธเจผเจคเจพ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจจ เจฒเจˆ Elasticsearch 'เจคเฉ‡ X-Pack เจ‡เฉฐเจธเจŸเจพเจฒ เจ•เจฐเฉ‹เฅค เจนเฉ‹เจฐ เจตเจฟเจธเจผเฉ‡เจธเจผเจคเจพเจตเจพเจ‚ เจ‰เจชเจฒเจฌเจง เจนเฉ‹ เจธเจ•เจฆเฉ€เจ†เจ‚ เจนเจจเฅค
logstash_one_channel | [2019-04-29T11:29:00,526][INFO ][logstash.agent ] Logstash API เจ…เฉฐเจคเจฎ เจฌเจฟเฉฐเจฆเฉ‚ {:port=>9600} เจจเฉ‚เฉฐ เจธเจซเจฒเจคเจพเจชเฉ‚เจฐเจตเจ• เจธเจผเฉเจฐเฉ‚ เจ•เฉ€เจคเจพ เจ—เจฟเจ†
logstash_one_channel | [INFO ] "/"}
logstash_one_channel | [2019-04-29T11:29:04,487][WARN][logstash.outputs.elasticsearch] เจฎเจฐเฉ‡ ES เจ‰เจฆเจพเจนเจฐเจจ เจฒเจˆ เจ•เจจเฉˆเจ•เจธเจผเจจ เจจเฉ‚เฉฐ เจฎเฉเฉœ เจธเฉเจฐเจœเฉ€เจค เจ•เจฐเจจ เจฆเฉ€ เจ•เฉ‹เจธเจผเจฟเจธเจผ เจ•เฉ€เจคเฉ€ เจ—เจˆ, เจชเจฐ เจ‡เฉฑเจ• เจคเจฐเฉเฉฑเจŸเฉ€ เจฎเจฟเจฒเฉ€เฅค {:url=>"เจฒเจšเจ•เฉ€เจฒเจพ:9200/", :error_type=>LogStash::Outputs::ElasticSearch::HttpClient::Pool::HostUnreachableError, :error=>"Elasticsearch เจชเจนเฉเฉฐเจšเจฏเฉ‹เจ— เจจเจนเฉ€เจ‚: [http://elasticsearch:9200/][Manticore::ResolutionFail. elasticsearch"}
logstash_one_channel | [INFO ] "/"}
logstash_one_channel | [2019-04-29T11:29:04,710][WARN ][logstash.licensechecker.licensereader] เจฎเจฐเฉ‡ เจนเฉ‹เจ ES เจ‰เจฆเจพเจนเจฐเจจ เจฒเจˆ เจ•เจจเฉˆเจ•เจธเจผเจจ เจจเฉ‚เฉฐ เจฎเฉเฉœ เจธเฉเจฐเจœเฉ€เจค เจ•เจฐเจจ เจฆเฉ€ เจ•เฉ‹เจธเจผเจฟเจธเจผ เจ•เฉ€เจคเฉ€ เจ—เจˆ, เจชเจฐ เจ‡เฉฑเจ• เจคเจฐเฉเฉฑเจŸเฉ€ เจฎเจฟเจฒเฉ€เฅค {:url=>"เจฒเจšเจ•เฉ€เจฒเจพ:9200/", :error_type=>LogStash::Outputs::ElasticSearch::HttpClient::Pool::HostUnreachableError, :error=>"Elasticsearch เจชเจนเฉเฉฐเจšเจฏเฉ‹เจ— เจจเจนเฉ€เจ‚: [http://elasticsearch:9200/][Manticore::ResolutionFail. elasticsearch"}

เจ…เจคเฉ‡ เจธเจพเจกเจพ เจฒเฉŒเจ— เจนเจฐ เจธเจฎเฉ‡เจ‚ เจตเจง เจฐเจฟเจนเจพ เจนเฉˆ.

เจ‡เฉฑเจฅเฉ‡ เจฎเฉˆเจ‚ เจนเจฐเฉ‡ เจฐเฉฐเจ— เจตเจฟเฉฑเจš เจธเฉเจจเฉ‡เจนเฉ‡ เจจเฉ‚เฉฐ เจ‰เจœเจพเจ—เจฐ เจ•เฉ€เจคเจพ เจนเฉˆ เจ•เจฟ เจชเจพเจˆเจชเจฒเจพเจˆเจจ เจธเจซเจฒเจคเจพเจชเฉ‚เจฐเจตเจ• เจธเจผเฉเจฐเฉ‚ เจนเฉ‹ เจ—เจˆ เจนเฉˆ, เจฒเจพเจฒ เจตเจฟเฉฑเจš เจ—เจฒเจคเฉ€ เจธเฉฐเจฆเฉ‡เจธเจผ เจ…เจคเฉ‡ เจชเฉ€เจฒเฉ‡ เจตเจฟเฉฑเจš เจธเฉฐเจชเจฐเจ• เจ•เจฐเจจ เจฆเฉ€ เจ•เฉ‹เจธเจผเจฟเจธเจผ เจฌเจพเจฐเฉ‡ เจธเฉฐเจฆเฉ‡เจธเจผ เจฒเจšเจ•เฉ€เจฒเจพ: 9200
เจ…เจœเจฟเจนเจพ เจ‡เจธ เจฒเจˆ เจนเฉเฉฐเจฆเจพ เจนเฉˆ เจ•เจฟเจ‰เจ‚เจ•เจฟ logstash.conf, เจšเจฟเฉฑเจคเจฐ เจตเจฟเฉฑเจš เจธเจผเจพเจฎเจฒ, เจตเจฟเฉฑเจš elasticsearch เจ‰เจชเจฒเจฌเจงเจคเจพ เจฆเฉ€ เจœเจพเจ‚เจš เจนเฉเฉฐเจฆเฉ€ เจนเฉˆเฅค เจ†เจ–เจผเจฐเจ•เจพเจฐ, เจฒเฉŒเจ—เจธเจŸเฉˆเจธเจผ เจฎเฉฐเจจเจฆเจพ เจนเฉˆ เจ•เจฟ เจ‡เจน เจเจฒเจ• เจธเจŸเฉˆเจ• เจฆเฉ‡ เจนเจฟเฉฑเจธเฉ‡ เจตเจœเฉ‹เจ‚ เจ•เฉฐเจฎ เจ•เจฐเจฆเจพ เจนเฉˆ, เจชเจฐ เจ…เจธเฉ€เจ‚ เจ‡เจธเจจเฉ‚เฉฐ เจตเฉฑเจ– เจ•เจฐ เจฆเจฟเฉฑเจคเจพ เจนเฉˆเฅค

เจ•เฉฐเจฎ เจ•เจฐเจจเจพ เจธเฉฐเจญเจต เจนเฉˆ, เจชเจฐ เจ‡เจน เจธเฉเจตเจฟเจงเจพเจœเจจเจ• เจจเจนเฉ€เจ‚ เจนเฉˆเฅค

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 เจฆเฉ‡ เจธเจฎเจพเจจ เจนเฉ‹เจฃเจพ เจšเจพเจนเฉ€เจฆเจพ เจนเฉˆ, i.e. เจจเจตเฉ€เจ†เจ‚ เจฒเจพเจˆเจจเจพเจ‚ เจชเฉœเฉเจนเจฆเจพ เจนเฉˆ เจœเจพเจ‚, เจ‡เฉฑเจ• เจตเจฟเจ•เจฒเจช เจตเจœเฉ‹เจ‚, เจชเฉ‚เจฐเฉ€ เจซเจพเจˆเจฒ เจจเฉ‚เฉฐ เจชเฉœเฉเจนเจฆเจพ เจนเฉˆเฅค

เจ‡เจธ เจฒเจˆ เจ…เจธเฉ€เจ‚ เจ•เฉ€ เจชเฉเจฐเจพเจชเจค เจ•เจฐเจจเจพ เจšเจพเจนเฉเฉฐเจฆเฉ‡ เจนเจพเจ‚:

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

เจ‡เจธ เจคเฉ‹เจ‚ เจ‡เจฒเจพเจตเจพ, เจ‡เฉฑเจ• เจธเฉ‚เจ–เจฎเจคเจพ เจนเฉˆ: เจ‡เจน เจธเจฟเจฐเจซ เจ‰เจนเจจเจพเจ‚ เจจเจตเฉ€เจ†เจ‚ เจซเจพเจˆเจฒเจพเจ‚ เจจเฉ‚เฉฐ เจชเฉเจฐเจญเจพเจตเจค เจ•เจฐเจฆเจพ เจนเฉˆ เจœเฉ‹ เจฒเฉŒเจ—เจธเจŸเฉˆเจธเจผ เจจเฉ‡ เจ…เจœเฉ‡ เจคเฉฑเจ• เจจเจนเฉ€เจ‚ เจตเฉ‡เจ–เฉ€เจ†เจ‚ เจนเจจ. เจ‰เจนเฉ€ เจซเจพเจˆเจฒเจพเจ‚ เจฒเจˆ เจœเฉ‹ เจชเจนเจฟเจฒเจพเจ‚ เจนเฉ€ เจฒเฉŒเจ—เจธเจŸเฉˆเจธเจผ เจฆเฉ‡ เจฆเฉเจฐเจฟเจธเจผเจŸเฉ€เจ•เฉ‹เจฃ เจตเจฟเฉฑเจš เจธเจจ, เจ‡เจธ เจจเฉ‡ เจ‰เจนเจจเจพเจ‚ เจฆเฉ‡ เจ†เจ•เจพเจฐ เจจเฉ‚เฉฐ เจชเจนเจฟเจฒเจพเจ‚ เจนเฉ€ เจฏเจพเจฆ เจฐเฉฑเจ–เจฟเจ† เจนเฉˆ เจ…เจคเฉ‡ เจนเฉเจฃ เจ‰เจนเจจเจพเจ‚ เจตเจฟเฉฑเจš เจธเจฟเจฐเจซ เจจเจตเฉ€เจ†เจ‚ เจเจ‚เจŸเจฐเฉ€เจ†เจ‚ เจฒเจตเฉ‡เจ—เฉ€.

เจ†เจ“ เจ‡เฉฑเจฅเฉ‡ เจฐเฉเจ•เฉ€เจ เจ…เจคเฉ‡ เจ‡เจจเจชเฉเจŸ เจธเฉˆเจ•เจธเจผเจจ เจฆเจพ เจ…เจงเจฟเจเจจ เจ•เจฐเฉ€เจเฅค เจ…เจœเฉ‡ เจตเฉ€ เจฌเจนเฉเจค เจธเจพเจฐเฉ‡ เจตเจฟเจ•เจฒเจช เจนเจจ, เจชเจฐ เจ‡เจน เจธเจพเจกเฉ‡ เจฒเจˆ เจนเฉเจฃ เจฒเจˆ เจนเฉ‹เจฐ เจชเฉเจฐเจฏเฉ‹เจ—เจพเจ‚ เจฒเจˆ เจ•เจพเจซเฉ€ เจนเฉˆเฅค

เจฐเฉ‚เจŸเจฟเฉฐเจ— เจ…เจคเฉ‡ เจกเจพเจŸเจพ เจชเจฐเจฟเจตเจฐเจคเจจ

เจ†เจ“ เจนเฉ‡เจ เจพเจ‚ เจฆเจฟเฉฑเจคเฉ€ เจธเจฎเฉฑเจธเจฟเจ† เจจเฉ‚เฉฐ เจนเฉฑเจฒ เจ•เจฐเจจ เจฆเฉ€ เจ•เฉ‹เจธเจผเจฟเจธเจผ เจ•เจฐเฉ€เจ, เจฎเฉฐเจจ เจฒเจ“ เจ•เจฟ เจธเจพเจกเฉ‡ เจ•เฉ‹เจฒ เจ‡เฉฑเจ• เจšเฉˆเจจเจฒ เจคเฉ‹เจ‚ เจธเฉฐเจฆเฉ‡เจธเจผ เจนเจจ, เจ‰เจจเฉเจนเจพเจ‚ เจตเจฟเฉฑเจšเฉ‹เจ‚ เจ•เฉเจ เจœเจพเจฃเจ•เจพเจฐเฉ€ เจตเจพเจฒเฉ‡ เจนเจจ, เจ…เจคเฉ‡ เจ•เฉเจ เจ—เจฒเจคเฉ€ เจธเฉเจจเฉ‡เจนเฉ‡ เจนเจจเฅค เจ‰เจน เจŸเฉˆเจ— เจฆเฉเจ†เจฐเจพ เจตเฉฑเจ–เจฐเฉ‡ เจนเจจ. เจ•เฉเจ INFO เจนเจจ, เจ•เฉเจ ERROR เจนเจจเฅค

เจธเจพเจจเฉ‚เฉฐ เจฌเจพเจนเจฐ เจจเจฟเจ•เจฒเจฃ 'เจคเฉ‡ เจ‰เจจเฉเจนเจพเจ‚ เจจเฉ‚เฉฐ เจตเฉฑเจ– เจ•เจฐเจจ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉˆเฅค เจ‰เจน. เจ…เจธเฉ€เจ‚ เจ‡เฉฑเจ• เจšเฉˆเจจเจฒ เจตเจฟเฉฑเจš เจœเจพเจฃเจ•เจพเจฐเฉ€ เจธเฉฐเจฆเฉ‡เจธเจผ เจฒเจฟเจ–เจฆเฉ‡ เจนเจพเจ‚, เจ…เจคเฉ‡ เจฆเฉ‚เจœเฉ‡ เจตเจฟเฉฑเจš เจ—เจฒเจคเฉ€ เจธเฉเจจเฉ‡เจนเฉ‡เฅค

เจ…เจœเจฟเจนเจพ เจ•เจฐเจจ เจฒเจˆ, เจ‡เจจเจชเฉเจŸ เจธเฉˆเจ•เจธเจผเจจ เจคเฉ‹เจ‚ เจซเจฟเจฒเจŸเจฐ เจ…เจคเฉ‡ เจ†เจ‰เจŸเจชเฉเฉฑเจŸ 'เจคเฉ‡ เจœเจพเจ“เฅค

เจซเจฟเจฒเจŸเจฐ เจธเฉˆเจ•เจธเจผเจจ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจฆเฉ‡ เจนเฉ‹เจ, เจ…เจธเฉ€เจ‚ เจ†เจ‰เจฃ เจตเจพเจฒเฉ‡ เจธเฉฐเจฆเฉ‡เจธเจผ เจจเฉ‚เฉฐ เจชเจพเจฐเจธ เจ•เจฐเจพเจ‚เจ—เฉ‡, เจ‡เจธ เจคเฉ‹เจ‚ เจ‡เฉฑเจ• เจนเฉˆเจธเจผ (เจ•เฉเฉฐเจœเฉ€-เจฎเฉเฉฑเจฒ เจœเฉ‹เฉœเฉ‡) เจชเฉเจฐเจพเจชเจค เจ•เจฐเจพเจ‚เจ—เฉ‡, เจœเจฟเจธ เจจเจพเจฒ เจ…เจธเฉ€เจ‚ เจชเจนเจฟเจฒเจพเจ‚ เจนเฉ€ เจ•เฉฐเจฎ เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเจพเจ‚, เจœเจฟเจตเฉ‡เจ‚ เจ•เจฟ. เจธเจผเจฐเจคเจพเจ‚ เจ…เจจเฉเจธเจพเจฐ เจตเฉฑเจ– เจ•เจฐเฉ‹. เจ…เจคเฉ‡ เจ†เจ‰เจŸเจชเฉเฉฑเจŸ เจญเจพเจ— เจตเจฟเฉฑเจš, เจ…เจธเฉ€เจ‚ เจธเฉเจจเฉ‡เจนเฉ‡ เจšเฉเจฃเจพเจ‚เจ—เฉ‡ เจ…เจคเฉ‡ เจนเจฐ เจ‡เฉฑเจ• เจจเฉ‚เฉฐ เจ‡เจธเจฆเฉ‡ เจ†เจชเจฃเฉ‡ เจšเฉˆเจจเจฒ เจคเฉ‡ เจญเฉ‡เจœเจพเจ‚เจ—เฉ‡เฅค

grok เจจเจพเจฒ เจ‡เฉฑเจ• เจธเฉเจจเฉ‡เจนเจพ เจชเจพเจฐเจธ เจ•เจฐเจจเจพ

เจŸเฉˆเจ•เจธเจŸ เจธเจคเจฐ เจจเฉ‚เฉฐ เจชเจพเจฐเจธ เจ•เจฐเจจ เจ…เจคเฉ‡ เจ‰เจนเจจเจพเจ‚ เจคเฉ‹เจ‚ เจ–เฉ‡เจคเจฐเจพเจ‚ เจฆเจพ เจ‡เฉฑเจ• เจธเฉˆเฉฑเจŸ เจชเฉเจฐเจพเจชเจค เจ•เจฐเจจ เจฒเจˆ, เจซเจฟเจฒเจŸเจฐ เจญเจพเจ— เจตเจฟเฉฑเจš เจ‡เฉฑเจ• เจตเจฟเจธเจผเฉ‡เจธเจผ เจชเจฒเฉฑเจ—เจ‡เจจ เจนเฉˆ - grok.

เจ†เจชเจฃเฉ‡ เจ†เจช เจจเฉ‚เฉฐ เจ‡เฉฑเจฅเฉ‡ เจ‡เจธเจฆเจพ เจตเจฟเจธเจคเฉเจฐเจฟเจค เจตเฉ‡เจฐเจตเจพ เจฆเฉ‡เจฃ เจฆเจพ เจŸเฉ€เจšเจพ เจจเจฟเจฐเจงเจพเจฐเจค เจ•เฉ€เจคเฉ‡ เจฌเจฟเจจเจพเจ‚ (เจ‡เจธเจฆเฉ‡ เจฒเจˆ เจฎเฉˆเจ‚ เจนเจตเจพเจฒเจพ เจฆเจฟเฉฐเจฆเจพ เจนเจพเจ‚ เจ…เจงเจฟเจ•เจพเจฐเจค เจฆเจธเจคเจพเจตเฉ‡เจœเจผ), เจฎเฉˆเจ‚ เจ†เจชเจฃเฉ€ เจธเจงเจพเจฐเจจ เจ‰เจฆเจพเจนเจฐเจฃ เจฆเฉ‡เจตเจพเจ‚เจ—เจพเฅค

เจ…เจœเจฟเจนเจพ เจ•เจฐเจจ เจฒเจˆ, เจคเฉเจนเจพเจจเฉ‚เฉฐ เจ‡เจจเจชเฉเจŸ เจธเจคเจฐ เจฆเฉ‡ เจซเจพเจฐเจฎเฉˆเจŸ 'เจคเฉ‡ เจซเฉˆเจธเจฒเจพ เจ•เจฐเจจ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉˆเฅค เจฎเฉ‡เจฐเฉ‡ เจ•เฉ‹เจฒ เจ‰เจน เจ‡เจธ เจคเจฐเฉเจนเจพเจ‚ เจนเจจ:

1 เจœเจพเจฃเจ•เจพเจฐเฉ€ เจธเฉเจจเฉ‡เจนเจพ 1
2 เจ—เจฒเจคเฉ€ เจธเฉเจจเฉ‡เจนเจพ2

เจ‰เจน. เจชเจ›เจพเจฃเจ•เจฐเจคเจพ เจชเจนเจฟเจฒเจพเจ‚ เจ†เจ‰เจ‚เจฆเจพ เจนเฉˆ, เจซเจฟเจฐ INFO/ERROR, เจซเจฟเจฐ เจ–เจพเจฒเฉ€ เจฅเจพเจ‚ เจคเฉ‹เจ‚ เจฌเจฟเจจเจพเจ‚ เจ•เฉเจ เจธเจผเจฌเจฆเฅค
เจ‡เจน เจฎเฉเจธเจผเจ•เจฒ เจจเจนเฉ€เจ‚ เจนเฉˆ, เจชเจฐ เจ“เจชเจฐเฉ‡เจธเจผเจจ เจฆเฉ‡ เจธเจฟเจงเจพเจ‚เจค เจจเฉ‚เฉฐ เจธเจฎเจเจฃ เจฒเจˆ เจ‡เจน เจ•เจพเจซเจผเฉ€ เจนเฉˆ.

เจ‡เจธ เจฒเจˆ, grok เจชเจฒเฉฑเจ—เจ‡เจจ เจฆเฉ‡ เจซเจฟเจฒเจŸเจฐ เจญเจพเจ— เจตเจฟเฉฑเจš, เจธเจพเจจเฉ‚เฉฐ เจ†เจชเจฃเฉ€เจ†เจ‚ เจธเจคเจฐเจพเจ‚ เจจเฉ‚เฉฐ เจชเจพเจฐเจธ เจ•เจฐเจจ เจฒเจˆ เจ‡เฉฑเจ• เจชเฉˆเจŸเจฐเจจ เจชเจฐเจฟเจญเจพเจธเจผเจฟเจค เจ•เจฐเจจเจพ เจšเจพเจนเฉ€เจฆเจพ เจนเฉˆเฅค

เจ‡เจน เจ‡เจธ เจคเจฐเฉเจนเจพเจ‚ เจฆเจฟเจ–เจพเจˆ เจฆเฉ‡เจตเฉ‡เจ—เจพ:

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

เจ…เจธเจฒ เจตเจฟเฉฑเจš เจ‡เจน เจ‡เฉฑเจ• เจจเจฟเจฏเจฎเจค เจธเจฎเฉ€เจ•เจฐเจจ เจนเฉˆเฅค เจฐเฉˆเจกเฉ€เจฎเฉ‡เจก เจชเฉˆเจŸเจฐเจจ เจตเจฐเจคเฉ‡ เจœเจพเจ‚เจฆเฉ‡ เจนเจจ, เจœเจฟเจตเฉ‡เจ‚ เจ•เจฟ INT, LOGLEVEL, WORDเฅค เจ‰เจนเจจเจพเจ‚ เจฆเจพ เจตเจฐเจฃเจจ, เจ…เจคเฉ‡ เจจเจพเจฒ เจนเฉ€ เจนเฉ‹เจฐ เจชเฉˆเจŸเจฐเจจ, เจ‡เฉฑเจฅเฉ‡ เจฒเฉฑเจญเฉ‡ เจœเจพ เจธเจ•เจฆเฉ‡ เจนเจจ เจ‡เฉฑเจฅเฉ‡

เจนเฉเจฃ, เจ‡เจธ เจซเจฟเจฒเจŸเจฐ เจตเจฟเฉฑเจšเฉ‹เจ‚ เจฒเฉฐเจ˜เจฆเจฟเจ†เจ‚, เจธเจพเจกเฉ€ เจธเจคเจฐ เจคเจฟเฉฐเจจ เจ–เฉ‡เจคเจฐเจพเจ‚ เจฆเฉ€ เจ‡เฉฑเจ• เจนเฉˆเจธเจผ เจตเจฟเฉฑเจš เจฌเจฆเจฒ เจœเจพเจตเฉ‡เจ—เฉ€: message_id, message_type, message_textเฅค

เจ‰เจน เจ†เจ‰เจŸเจชเฉเฉฑเจŸ เจญเจพเจ— เจตเจฟเฉฑเจš เจชเฉเจฐเจฆเจฐเจธเจผเจฟเจค เจ•เฉ€เจคเฉ‡ เจœเจพเจฃเจ—เฉ‡.

if เจ•เจฎเจพเจ‚เจก เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจ•เฉ‡ เจธเฉเจจเฉ‡เจนเจฟเจ†เจ‚ เจจเฉ‚เฉฐ เจ†เจ‰เจŸเจชเฉเฉฑเจŸ เจญเจพเจ— เจตเจฟเฉฑเจš เจฐเฉ‚เจŸเจฟเฉฐเจ— เจ•เจฐเจจเจพ

เจ†เจ‰เจŸเจชเฉเฉฑเจŸ เจญเจพเจ— เจตเจฟเฉฑเจš, เจœเจฟเจตเฉ‡เจ‚ เจ•เจฟ เจธเจพเจจเฉ‚เฉฐ เจฏเจพเจฆ เจนเฉˆ, เจ…เจธเฉ€เจ‚ เจธเฉฐเจฆเฉ‡เจธเจผเจพเจ‚ เจจเฉ‚เฉฐ เจฆเฉ‹ เจงเจพเจฐเจพเจตเจพเจ‚ เจตเจฟเฉฑเจš เจตเฉฐเจกเจฃ เจœเจพ เจฐเจนเฉ‡ เจธเฉ€เฅค เจ•เฉเจ - เจœเฉ‹ เจ•เจฟ iNFO เจนเจจ, เจ•เฉฐเจธเฉ‹เจฒ เจตเจฟเฉฑเจš เจ†เจ‰เจŸเจชเฉเฉฑเจŸ เจนเฉ‹เจฃเจ—เฉ‡, เจ…เจคเฉ‡ เจ—เจฒเจคเฉ€เจ†เจ‚ เจฆเฉ‡ เจจเจพเจฒ, เจ…เจธเฉ€เจ‚ เจ‡เฉฑเจ• เจซเจพเจˆเจฒ เจตเจฟเฉฑเจš เจ†เจ‰เจŸเจชเฉเฉฑเจŸ เจ•เจฐเจพเจ‚เจ—เฉ‡เฅค

เจ…เจธเฉ€เจ‚ เจ‡เจนเจจเจพเจ‚ เจธเฉเจจเฉ‡เจนเจฟเจ†เจ‚ เจจเฉ‚เฉฐ เจ•เจฟเจตเฉ‡เจ‚ เจตเฉฑเจ– เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚? เจธเจฎเฉฑเจธเจฟเจ† เจฆเฉ€ เจธเจฅเจฟเจคเฉ€ เจชเจนเจฟเจฒเจพเจ‚ เจนเฉ€ เจ‡เฉฑเจ• เจนเฉฑเจฒ เจธเฉเจเจพเจ‰เจ‚เจฆเฉ€ เจนเฉˆ - เจ†เจ–เจฐเจ•เจพเจฐ, เจธเจพเจกเฉ‡ เจ•เฉ‹เจฒ เจชเจนเจฟเจฒเจพเจ‚ เจนเฉ€ เจ‡เฉฑเจ• เจธเจฎเจฐเจชเจฟเจค เจธเฉเจจเฉ‡เจนเจพ_เจŸเจพเจˆเจช เจ–เฉ‡เจคเจฐ เจนเฉˆ, เจœเฉ‹ เจธเจฟเจฐเจซ เจฆเฉ‹ เจฎเฉเฉฑเจฒ เจฒเฉˆ เจธเจ•เจฆเจพ เจนเฉˆ: INFO เจ…เจคเฉ‡ ERRORเฅค เจ‡เจน เจ‡เจธ เจ†เจงเจพเจฐ 'เจคเฉ‡ เจนเฉˆ เจ•เจฟ เจ…เจธเฉ€เจ‚ if เจธเจŸเฉ‡เจŸเจฎเฉˆเจ‚เจŸ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจ•เฉ‡ เจšเฉ‹เจฃ เจ•เจฐเจพเจ‚เจ—เฉ‡เฅค

if [message_type] == "ERROR" {
        # ะ—ะดะตััŒ ะฒั‹ะฒะพะดะธะผ ะฒ ั„ะฐะนะป
       } else
     {
      # ะ—ะดะตััŒ ะฒั‹ะฒะพะดะธะผ ะฒ stdout
    }

เจ–เฉ‡เจคเจฐเจพเจ‚ เจ…เจคเฉ‡ เจ†เจชเจฐเฉ‡เจŸเจฐเจพเจ‚ เจจเจพเจฒ เจ•เฉฐเจฎ เจ•เจฐเจจ เจฆเจพ เจตเฉ‡เจฐเจตเจพ เจ‡เจธ เจญเจพเจ— เจตเจฟเฉฑเจš เจชเจพเจ‡เจ† เจœเจพ เจธเจ•เจฆเจพ เจนเฉˆ เจ…เจงเจฟเจ•เจพเจฐเจค เจฎเฉˆเจจเฉ‚เจ…เจฒ.

เจนเฉเจฃ, เจ…เจธเจฒ เจธเจฟเฉฑเจŸเฉ‡ เจฌเจพเจฐเฉ‡ เจ†เจชเจฃเฉ‡ เจ†เจช เจจเฉ‚เฉฐ.

เจ•เฉฐเจธเฉ‹เจฒ เจ†เจ‰เจŸเจชเฉเฉฑเจŸ, เจ‡เฉฑเจฅเฉ‡ เจธเจญ เจ•เฉเจ เจธเจชเจธเจผเจŸ เจนเฉˆ - stdout {}

เจชเจฐ เจ‡เฉฑเจ• เจซเจพเจˆเจฒ เจฒเจˆ เจ†เจ‰เจŸเจชเฉเฉฑเจŸ - เจฏเจพเจฆ เจฐเฉฑเจ–เฉ‹ เจ•เจฟ เจ…เจธเฉ€เจ‚ เจ‡เจน เจธเจญ เจ‡เฉฑเจ• เจ•เฉฐเจŸเฉ‡เจจเจฐ เจคเฉ‹เจ‚ เจšเจฒเจพ เจฐเจนเฉ‡ เจนเจพเจ‚ เจ…เจคเฉ‡ เจœเจฟเจธ เจซเจพเจˆเจฒ เจตเจฟเฉฑเจš เจ…เจธเฉ€เจ‚ เจจเจคเฉ€เจœเจพ เจฒเจฟเจ–เจฆเฉ‡ เจนเจพเจ‚ เจฌเจพเจนเจฐเฉ‹เจ‚ เจชเจนเฉเฉฐเจšเจฏเฉ‹เจ— เจนเฉ‹เจฃ เจฒเจˆ, เจธเจพเจจเฉ‚เฉฐ เจ‡เจธ เจกเจพเจ‡เจฐเฉˆเจ•เจŸเจฐเฉ€ เจจเฉ‚เฉฐ docker-compose.yml เจตเจฟเฉฑเจš เจ–เฉ‹เจฒเฉเจนเจฃ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉˆเฅค

เจ•เฉเฉฑเจฒ:

เจธเจพเจกเฉ€ เจซเจพเจˆเจฒ เจฆเจพ เจ†เจ‰เจŸเจชเฉเฉฑเจŸ เจญเจพเจ— เจ‡เจธ เจคเจฐเฉเจนเจพเจ‚ เจฆเจฟเจ–เจพเจˆ เจฆเจฟเฉฐเจฆเจพ เจนเฉˆ:

โ€จoutput {
  if [message_type] == "ERROR" {
    file {
          path => "/usr/share/logstash/output/test.log"
          codec => line { format => "custom format: %{message}"}
         }
    } else
     {stdout {
             }
     }
  }

docker-compose.yml เจตเจฟเฉฑเจš เจ…เจธเฉ€เจ‚ เจ†เจ‰เจŸเจชเฉเฉฑเจŸ เจฒเจˆ เจ‡เฉฑเจ• เจนเฉ‹เจฐ เจตเจพเจฒเฉ€เจ…เจฎ เจœเฉ‹เฉœเจฆเฉ‡ เจนเจพเจ‚:

version: '3'

networks:
  elk:

volumes:
  elasticsearch:
    driver: local

services:

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

เจ…เจธเฉ€เจ‚ เจ‡เจธเจจเฉ‚เฉฐ เจฒเจพเจ‚เจš เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚, เจ‡เจธเจจเฉ‚เฉฐ เจ…เจœเจผเจฎเจพเจ‰เจ‚เจฆเฉ‡ เจนเจพเจ‚, เจ…เจคเฉ‡ เจฆเฉ‹ เจงเจพเจฐเจพเจตเจพเจ‚ เจตเจฟเฉฑเจš เจตเฉฐเจก เจฆเฉ‡เจ–เจฆเฉ‡ เจนเจพเจ‚เฅค

เจธเจฐเฉ‹เจค: www.habr.com

เจ‡เฉฑเจ• เจŸเจฟเฉฑเจชเจฃเฉ€ เจœเฉ‹เฉœเฉ‹