αž€αžΆαžšαž’αž“αž»αžœαžαŸ’αžαž‡αžΆαž€αŸ‹αžŸαŸ’αžαŸ‚αž„αž“αŸƒ ELK αŸ” αž€αžΆαžšαžŠαŸ†αž‘αžΎαž„ logstash

αžŸαŸαž…αž€αŸ’αžαžΈαžŽαŸ‚αž“αžΆαŸ†

αžαžŽαŸˆαž–αŸαž›αžŠαŸ‚αž›αžŠαžΆαž€αŸ‹αž–αž„αŸ’αžšαžΆαž™αž”αŸ’αžšαž–αŸαž“αŸ’αž’αž˜αž½αž™αž•αŸ’αžŸαŸαž„αž‘αŸ€αž αž™αžΎαž„αžαŸ’αžšαžΌαžœαž”αŸ’αžšαžˆαž˜αž˜αž»αžαž“αžΉαž„αžαž˜αŸ’αžšαžΌαžœαž€αžΆαžšαžŠαžΎαž˜αŸ’αž”αžΈαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αž αŸαžαž»αž•αŸ’αžŸαŸαž„αŸ—αž‚αŸ’αž“αžΆαž‡αžΆαž…αŸ’αžšαžΎαž“αŸ” ELK αžαŸ’αžšαžΌαžœαž”αžΆαž“αž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸαž‡αžΆαž§αž”αž€αžšαžŽαŸαŸ” αž’αžαŸ’αžαž”αž‘αž“αŸαŸ‡αž“αžΉαž„αž–αž·αž—αžΆαž€αŸ’αžŸαžΆαž’αŸ†αž–αžΈαž”αž‘αž–αž·αžŸαŸ„αž’αž“αŸαžšαž”αžŸαŸ‹αž™αžΎαž„αž€αŸ’αž“αž»αž„αž€αžΆαžšαžŠαŸ†αž‘αžΎαž„αž‡αž„αŸ‹αž“αŸαŸ‡αŸ”

αž™αžΎαž„αž˜αž·αž“αž€αŸ†αžŽαžαŸ‹αž‚αŸ„αž›αžŠαŸ…αžŠαžΎαž˜αŸ’αž”αžΈαž–αž·αž–αžŽαŸŒαž“αžΆαž’αŸ†αž–αžΈαžŸαž˜αžαŸ’αžαž—αžΆαž–αžšαž”αžŸαŸ‹αžœαžΆαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž“αŸ„αŸ‡αž‘αŸ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž™αžΎαž„αž…αž„αŸ‹αž•αŸ’αžαŸ„αžαž‡αžΆαž–αž·αžŸαŸαžŸαž›αžΎαž€αžΆαžšαžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž”αž‰αŸ’αž αžΆαž‡αžΆαž€αŸ‹αžŸαŸ’αžαŸ‚αž„αŸ” αž“αŸαŸ‡αž‚αžΊαžŠαŸ„αž™αžŸαžΆαžšαžαŸ‚αž€αžΆαžšαž–αž·αžαžŠαŸ‚αž›αžαžΆ αž‘αŸ„αŸ‡αž”αžΈαž‡αžΆαž˜αžΆαž“αž―αž€αžŸαžΆαžšαž…αŸ’αžšαžΎαž“αž‚αž½αžšαžŸαž˜ αž“αž·αž„αžšαžΌαž”αž—αžΆαž–αžŠαŸ‚αž›αžαŸ’αžšαŸ€αž˜αžšαž½αž…αž‡αžΆαžŸαŸ’αžšαŸαž…αž€αŸαžŠαŸ„αž™ αžœαžΆαž˜αžΆαž“αž€αŸ†αž αž»αžŸαž…αŸ’αžšαžΎαž“αžŽαžΆαžŸαŸ‹ αž™αŸ‰αžΆαž„αž αŸ„αž…αžŽαžΆαžŸαŸ‹αž™αžΎαž„αž”αžΆαž“αžšαž€αžƒαžΎαž‰αž–αž½αž€αž‚αŸαŸ”

αž™αžΎαž„αž”αžΆαž“αžŠαžΆαž€αŸ‹αž–αž„αŸ’αžšαžΆαž™αž‡αž„αŸ‹αžαžΆαž˜αžšαž™αŸˆ docker-compose αŸ” αž›αžΎαžŸαž–αžΈαž“αŸαŸ‡αž‘αŸ…αž‘αŸ€αž αž™αžΎαž„αž˜αžΆαž“αž―αž€αžŸαžΆαžš docker-compose.yml αžŠαŸ‚αž›αžŸαžšαžŸαŸαžšαž”αžΆαž“αž›αŸ’αž’ αžŠαŸ‚αž›αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž™αžΎαž„αž›αžΎαž€αž‡αž„αŸ‹αžŸαŸ’αž‘αžΎαžšαžαŸ‚αž‚αŸ’αž˜αžΆαž“αž”αž‰αŸ’αž αžΆαŸ” αž αžΎαž™αžœαžΆαž αžΆαž€αŸ‹αžŠαžΌαž…αž‡αžΆαž–αž½αž€αž™αžΎαž„αžαžΆ αž‡αŸαž™αž‡αŸ†αž“αŸ‡αž”αžΆαž“αžαž·αžαž‡αž·αžαž˜αž€αžŠαž›αŸ‹αž αžΎαž™ αž₯αž‘αžΌαžœαž“αŸαŸ‡αž™αžΎαž„αž“αžΉαž„αž€αŸ‚αž”αŸ’αžšαŸ‚αžœαžΆαž”αž“αŸ’αžαž·αž… αžŠαžΎαž˜αŸ’αž”αžΈαž”αŸ†αž–αŸαž‰αžαž˜αŸ’αžšαžΌαžœαž€αžΆαžšαžšαž”αžŸαŸ‹αž™αžΎαž„ αž αžΎαž™αž“αŸ„αŸ‡αž‡αžΆαžœαžΆαŸ”

αž‡αžΆαž’αž€αž»αžŸαž› αž€αžΆαžšαž–αŸ’αž™αžΆαž™αžΆαž˜αž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž”αŸ’αžšαž–αŸαž“αŸ’αž’αžŠαžΎαž˜αŸ’αž”αžΈαž‘αž‘αž½αž› αž“αž·αž„αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αž αŸαžαž»αž–αžΈαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžšαž”αžŸαŸ‹αž™αžΎαž„αž˜αž·αž“αž”αžΆαž“αž‡αŸ„αž‚αž‡αŸαž™αž—αŸ’αž›αžΆαž˜αŸ—αž“αŸ„αŸ‡αž‘αŸαŸ” αžŠαžΌαž…αŸ’αž“αŸαŸ‡αž αžΎαž™ αž™αžΎαž„αž”αžΆαž“αžŸαž˜αŸ’αžšαŸαž…αž…αž·αžαŸ’αžαžαžΆαžœαžΆαž˜αžΆαž“αžαž˜αŸ’αž›αŸƒαžŸαž·αž€αŸ’αžŸαžΆαžŸαž˜αžΆαžŸαž’αžΆαžαž»αž“αžΈαž˜αž½αž™αŸ—αžŠαžΆαž…αŸ‹αžŠαŸ„αž™αž‘αŸ‚αž€αž–αžΈαž‚αŸ’αž“αžΆ αž αžΎαž™αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€αžαŸ’αžšαž‘αž”αŸ‹αž‘αŸ…αž€αžΆαžšαžαž—αŸ’αž‡αžΆαž”αŸ‹αžšαž”αžŸαŸ‹αž–αž½αž€αž‚αŸαžœαž·αž‰αŸ”

αžŠαžΌαž…αŸ’αž“αŸαŸ‡αž™αžΎαž„αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž‡αžΆαž˜αž½αž™ logstash αŸ”

αž”αžšαž·αžŸαŸ’αžαžΆαž“ αž€αžΆαžšαžŠαžΆαž€αŸ‹αž–αž„αŸ’αžšαžΆαž™ αžŠαŸ†αžŽαžΎαžšαž€αžΆαžš Logstash αž“αŸ…αž€αŸ’αž“αž»αž„αž€αž»αž„αžαžΊαž“αŸαžš

αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαžŠαžΆαž€αŸ‹αž–αž„αŸ’αžšαžΆαž™ αž™αžΎαž„αž”αŸ’αžšαžΎ docker-compose αž€αžΆαžšαž–αž·αžŸαŸ„αž’αž“αŸαžŠαŸ‚αž›αž”αžΆαž“αž–αž·αž–αžŽαŸŒαž“αžΆαž“αŸ…αž‘αžΈαž“αŸαŸ‡αžαŸ’αžšαžΌαžœαž”αžΆαž“αž’αž“αž»αžœαžαŸ’αžαž“αŸ…αž›αžΎ MacOS αž“αž·αž„ Ubuntu 18.0.4 αŸ”

αžšαžΌαž”αž—αžΆαž– 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 ដើម (αž‡αžΆαž€αž“αŸ’αž›αŸ‚αž„αžŠαŸ‚αž›αž‡αž„αŸ‹αž‘αžΆαŸ†αž„αž˜αžΌαž›αžαŸ’αžšαžΌαžœαž”αžΆαž“αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜) αž αžΎαž™αžαŸ’αž‰αž»αŸ†αž‚αž·αžαžαžΆαžœαžΆαž˜αž·αž“αž”αŸ‰αŸ‡αž–αžΆαž›αŸ‹αžŠαž›αŸ‹αžšαžΌαž”αž—αžΆαž–αž‘αžΆαŸ†αž„αž˜αžΌαž›αž“αŸ…αž‘αžΈαž“αŸαŸ‡αž‘αŸαŸ”
  2. αž™αžΎαž„αž”αž„αŸ’αž€αžΎαžαžŸαŸαžœαžΆαž€αž˜αŸ’αž˜ logstash αž˜αž½αž™αž–αžΈαžšαžΌαž”αž—αžΆαž– 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 αŸ” αž€αžΆαžšαžŠαŸ†αž‘αžΎαž„ 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] αžŸαŸ’αžœαŸ‚αž„αžšαž€αž™αžΊαž"}
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] αžŸαŸ’αžœαŸ‚αž„αžšαž€αž™αžΊαž"}

αž αžΎαž™αž€αŸ†αžŽαžαŸ‹αž αŸαžαž»αžšαž”αžŸαŸ‹αž™αžΎαž„αž€αŸ†αž–αž»αž„αž›αžΌαž“αž‘αžΎαž„αž‚αŸ’αžšαž”αŸ‹αž–αŸαž›αžœαŸαž›αžΆαŸ”

αž“αŸ…αž‘αžΈαž“αŸαŸ‡αžαŸ’αž‰αž»αŸ†αž”αžΆαž“αžšαŸ†αž›αŸαž…αž‡αžΆαž–αžŽαŸŒαž”αŸƒαžαž„αž“αžΌαžœαžŸαžΆαžšαžŠαŸ‚αž›αž”αŸ†αž–αž„αŸ‹αž”αž„αŸ’αž αžΌαžšαž”αŸ’αžšαŸαž„αž”αžΆαž“αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžŠαŸ„αž™αž‡αŸ„αž‚αž‡αŸαž™ αž–αžŽαŸŒαž€αŸ’αžšαž αž˜αž“αŸƒαžŸαžΆαžšαž€αŸ†αž αž»αžŸ αž“αž·αž„αž–αžŽαŸŒαž›αžΏαž„αž‡αžΆαžŸαžΆαžšαž’αŸ†αž–αžΈαž€αžΆαžšαž–αŸ’αž™αžΆαž™αžΆαž˜αž‘αžΆαž€αŸ‹αž‘αž„αŸ” αžŸαžšαžŸαŸƒαž–αž½αžšαŸ”: 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

αž₯αž‘αžΌαžœαž“αŸαŸ‡αž’αŸ’αžœαžΈαž‚αŸ’αžšαž”αŸ‹αž™αŸ‰αžΆαž„αž‚αžΊαž›αŸ’αž’αŸ” αž’αž»αž„αžαŸ’αžšαŸ€αž˜αžšαž½αž…αžšαžΆαž›αŸ‹αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž–αž·αžŸαŸ„αž’αž“αŸαŸ”

αž™αžΎαž„αž’αžΆαž…αžœαžΆαž™αž˜αŸ’αžαž„αž‘αŸ€αžαž“αŸ…αž€αŸ’αž“αž»αž„αž€αž»αž„αžŸαžΌαž›αž”αž“αŸ’αž‘αžΆαž”αŸ‹αŸ–

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 αž₯αž‘αžΌαžœαž“αŸαŸ‡ αžαŸ„αŸ‡αž˜αžΎαž›αž’αŸ’αžœαžΈαžŠαŸ‚αž›αž™αžΎαž„αž’αžΆαž…αž‘αž‘αž½αž›αž”αžΆαž“αžŠαŸ„αž™αž’αŸ’αžœαžΎαž€αžΆαžšαž‡αžΆαž˜αž½αž™αž†αžΆαž“αŸ‚αž›αž˜αž½αž™αŸ”

αžαŸ’αž‰αž»αŸ†αžαŸ’αžšαžΌαžœαžαŸ‚αž“αž·αž™αžΆαž™αžαžΆαž‚αŸ„αž›αž€αžΆαžšαžŽαŸαž‘αžΌαž‘αŸ…αž“αŸƒαž€αžΆαžšαž’αŸ’αžœαžΎαž€αžΆαžšαž‡αžΆαž˜αž½αž™αž―αž€αžŸαžΆαžšαž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž†αžΆαž“αŸ‚αž›αžαŸ’αžšαžΌαžœαž”αžΆαž“αž–αž·αž–αžŽαŸŒαž“αžΆαž™αŸ‰αžΆαž„αž›αŸ’αž’αž“αŸ…αž€αŸ’αž“αž»αž„αžŸαŸ€αžœαž—αŸ…αžŽαŸ‚αž“αžΆαŸ†αž•αŸ’αž›αžΌαžœαž€αžΆαžšαž“αŸ…αž‘αžΈαž“αŸαŸ‡ αž“αŸ…αž‘αžΈαž“αŸαŸ‡
αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αŸ’αž“αž€αž…αž„αŸ‹αž’αžΆαž“αž‡αžΆαž—αžΆαžŸαžΆαžšαž»αžŸαŸ’αžŸαžΈ αž™αžΎαž„αž”αžΆαž“αž”αŸ’αžšαžΎαž˜αž½αž™αž“αŸαŸ‡ αž’αžαŸ’αžαž”αž‘(αž”αŸ‰αž»αž“αŸ’αžαŸ‚αžœαžΆαž€αŸ’αž™αžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αžŸαŸ†αžŽαž½αžšαž“αŸ…αž‘αžΈαž“αŸ„αŸ‡αž‚αžΊαž…αžΆαžŸαŸ‹ αž™αžΎαž„αžαŸ’αžšαžΌαžœαž™αž€αž˜αž€αž–αž·αž…αžΆαžšαžŽαžΆ)αŸ”

αžαŸ„αŸ‡αž”αž“αŸ’αžαž”αž“αŸ’αž‘αžΆαž”αŸ‹αž‚αŸ’αž“αžΆαž–αžΈαž•αŸ’αž“αŸ‚αž€αž”αž‰αŸ’αž…αžΌαž›αŸ” αž™αžΎαž„αž”αžΆαž“αžƒαžΎαž‰αž€αžΆαžšαž„αžΆαžšαž“αŸ…αž›αžΎ 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
   }
  }

αž€αžΆαžšαž‘αžΆαž‰αž™αž€αž‘αž·αž“αŸ’αž“αž“αŸαž™αž–αžΈαž―αž€αžŸαžΆαžš

αž™αžΎαž„αž€αŸαžŸαž˜αŸ’αžšαŸαž…αž…αž·αžαŸ’αžαž˜αžΎαž›αžšαž”αŸ€αž”αž―αž€αžŸαžΆαžšαŸ” αž”αŸ’αžšαžŸαž·αž“αž”αžΎαžœαžΆαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž›αŸ’αž’αž‡αžΆαž˜αž½αž™αž―αž€αžŸαžΆαžš αž“αŸ„αŸ‡αž”αŸ’αžšαž αŸ‚αž›αž‡αžΆαž˜αž·αž“αžαŸ’αžšαžΌαžœαž€αžΆαžšαž—αŸ’αž“αžΆαž€αŸ‹αž„αžΆαžšαž‘αŸ αž™αŸ‰αžΆαž„αž αŸ„αž…αžŽαžΆαžŸαŸ‹αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž€αŸ’αž“αž»αž„αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αŸ”

αž™αŸ„αž„αžαžΆαž˜αž€αžΆαžšαž–αž·αž–αžŽαŸŒαž“αžΆαžšαž”αŸ€αž”αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαž‚αž½αžšαžαŸ‚αžŸαŸ’αžšαžŠαŸ€αž„αž‘αŸ…αž“αžΉαž„αž€αž“αŸ’αž‘αž»αž™ -f, i.e. αž’αžΆαž“αž”αž“αŸ’αž‘αžΆαžαŸ‹αžαŸ’αž˜αžΈ αž¬αž‡αžΆαž‡αž˜αŸ’αžšαžΎαžŸαž˜αž½αž™ αž’αžΆαž“αž―αž€αžŸαžΆαžšαž‘αžΆαŸ†αž„αž˜αžΌαž›αŸ”

αžŠαžΌαž…αŸ’αž“αŸαŸ‡αž’αŸ’αžœαžΈαžŠαŸ‚αž›αž™αžΎαž„αž…αž„αŸ‹αž‘αž‘αž½αž›αž”αžΆαž“αŸ–

  1. αž™αžΎαž„αž…αž„αŸ‹αž‘αž‘αž½αž›αž”αž“αŸ’αž‘αžΆαžαŸ‹αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž“αŸ’αžαŸ‚αž˜αž‘αŸ…αž―αž€αžŸαžΆαžšαž€αŸ†αžŽαžαŸ‹αž αŸαžαž»αž˜αž½αž™αŸ”
  2. αž™αžΎαž„αž…αž„αŸ‹αž‘αž‘αž½αž›αž‘αž·αž“αŸ’αž“αž“αŸαž™αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž”αžΆαž“αžŸαžšαžŸαŸαžšαž‘αŸ…αž―αž€αžŸαžΆαžšαž€αŸ†αžŽαžαŸ‹αž αŸαžαž»αž‡αžΆαž…αŸ’αžšαžΎαž“ αžαžŽαŸˆαž–αŸαž›αžŠαŸ‚αž›αž’αžΆαž…αž”αŸ†αž”αŸ‚αž€αž’αŸ’αžœαžΈαžŠαŸ‚αž›αž”αžΆαž“αž‘αž‘αž½αž›αž–αžΈαž€αž“αŸ’αž›αŸ‚αž„αžŽαžΆαŸ”
  3. αž™αžΎαž„αž…αž„αŸ‹αž’αŸ’αžœαžΎαž±αŸ’αž™αž”αŸ’αžšαžΆαž€αžŠαžαžΆ αž“αŸ…αž–αŸαž›αžŠαŸ‚αž› logstash αžαŸ’αžšαžΌαžœαž”αžΆαž“αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž‘αžΎαž„αžœαž·αž‰ αžœαžΆαž˜αž·αž“αž‘αž‘αž½αž›αž”αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αž“αŸαŸ‡αž˜αŸ’αžαž„αž‘αŸ€αžαž‘αŸαŸ”
  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 αž αžΎαž™αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž˜αŸ’αžαž„αž‘αŸ€αžαŸ” αžŸαžΌαž˜β€‹αžšαž„αŸ‹αž…αžΆαŸ†αŸ” αžŸαŸ’αž„αžΆαžαŸ‹αŸ” αž‘αžΆαŸ†αž„αž“αŸ„αŸ‡αŸ” αž™αžΎαž„αž˜αž·αž“αž‘αž‘αž½αž›αž”αžΆαž“αž€αŸ†αžŽαžαŸ‹αžαŸ’αžšαžΆαž‘αžΆαŸ†αž„αž“αŸαŸ‡αž˜αŸ’αžαž„αž‘αŸ€αžαž‘αŸαŸ”

αž αžΎαž™αž₯αž‘αžΌαžœαž“αŸαŸ‡αž€αžΆαžšαž–αž·αžŸαŸ„αž’αž“αŸαžŠαŸαž€αŸ’αž›αžΆαž αžΆαž“αž”αŸ†αž•αž»αžαŸ”

αžŠαŸ†αž‘αžΎαž„ 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 αž˜αž·αž“αž‘αžΆαž“αŸ‹αž”αžΆαž“αžƒαžΎαž‰αŸ” αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž―αž€αžŸαžΆαžšαžŠαžΌαž…αž‚αŸ’αž“αžΆαžŠαŸ‚αž›αž˜αžΆαž“αžšαž½αž…αž αžΎαž™αž“αŸ…αž€αŸ’αž“αž»αž„αžœαžΆαž›αž“αŸƒαž‘αž·αžŠαŸ’αž‹αž—αžΆαž–αž“αŸƒ logstash αžœαžΆαž”αžΆαž“αž…αž„αž…αžΆαŸ†αž‘αŸ†αž αŸ†αžšαž”αžŸαŸ‹αžœαžΆαžšαž½αž…αž αžΎαž™ αž αžΎαž™αž₯αž‘αžΌαžœαž“αŸαŸ‡αž“αžΉαž„αž™αž€αžαŸ‚αž’αžΆαžαž»αžαŸ’αž˜αžΈαž“αŸ…αž€αŸ’αž“αž»αž„αž–αž½αž€αžœαžΆαž”αŸ‰αž»αžŽαŸ’αžŽαŸ„αŸ‡αŸ”

αž…αžΌαžšαž™αžΎαž„αžˆαž”αŸ‹αž“αŸ…αž‘αžΈαž“αŸαŸ‡ αž αžΎαž™αžŸαž·αž€αŸ’αžŸαžΆαž•αŸ’αž“αŸ‚αž€αž”αž‰αŸ’αž…αžΌαž›αŸ” αž“αŸ…αž˜αžΆαž“αž‡αž˜αŸ’αžšαžΎαžŸαž‡αžΆαž…αŸ’αžšαžΎαž“ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αžœαžΆαž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαžΆαž“αŸ‹αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž™αžΎαž„αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž–αž·αžŸαŸ„αž’αž“αŸαž”αž“αŸ’αžαŸ‚αž˜αž‘αŸ€αžαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž–αŸαž›αž“αŸαŸ‡αŸ”

αž€αžΆαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž•αŸ’αž›αžΌαžœ αž“αž·αž„αž‘αž·αž“αŸ’αž“αž“αŸαž™

αžαŸ„αŸ‡αžŸαžΆαž€αž›αŸ’αž”αž„αžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž”αž‰αŸ’αž αžΆαžαžΆαž„αž€αŸ’αžšαŸ„αž˜ αž§αž”αž˜αžΆαžαžΆαž™αžΎαž„αž˜αžΆαž“αžŸαžΆαžšαž–αžΈαž†αžΆαž“αŸ‚αž›αž˜αž½αž™ αžαŸ’αž›αŸ‡αž‡αžΆαž–αŸαžαŸŒαž˜αžΆαž“ αž“αž·αž„αžαŸ’αž›αŸ‡αž‡αžΆαžŸαžΆαžšαž€αŸ†αž αž»αžŸαŸ” αž–αž½αž€αžœαžΆαžαž»αžŸαž‚αŸ’αž“αžΆαžαžΆαž˜αžŸαŸ’αž›αžΆαž€αŸ” αžαŸ’αž›αŸ‡αž‡αžΆ INFO αžαŸ’αž›αŸ‡αž‘αŸ€αžαž‡αžΆ ERRORαŸ”

αž™αžΎαž„αžαŸ’αžšαžΌαžœαž”αŸ†αž”αŸ‚αž€αž–αž½αž€αž‚αŸαž“αŸ…αž…αŸ’αžšαž€αž…αŸαž‰αŸ” αž‘αžΆαŸ†αž„αž“αŸ„αŸ‡αŸ” αž™αžΎαž„β€‹αžŸαžšαžŸαŸαžšβ€‹αžŸαžΆαžšβ€‹αž–αŸαžαŸŒαž˜αžΆαž“β€‹αž€αŸ’αž“αž»αž„β€‹αž†αžΆαž“αŸ‚αž›β€‹αž˜αž½αž™ αž αžΎαž™β€‹αžŸαžΆαžšβ€‹αž€αŸ†αž αž»αžŸβ€‹αž€αŸ’αž“αž»αž„β€‹αž˜αž½αž™β€‹αž‘αŸ€αžβ€‹αŸ”

αžŠαžΎαž˜αŸ’αž”αžΈαž’αŸ’αžœαžΎαžŠαžΌαž…αž“αŸαŸ‡αž•αŸ’αž›αžΆαžŸαŸ‹αž‘αžΈαž–αžΈαž•αŸ’αž“αŸ‚αž€αž”αž‰αŸ’αž…αžΌαž›αž‘αŸ…αžαž˜αŸ’αžšαž„αž“αž·αž„αž‘αž·αž“αŸ’αž“αž•αž›αŸ”

αžŠαŸ„αž™αž”αŸ’αžšαžΎαž•αŸ’αž“αŸ‚αž€αžαž˜αŸ’αžšαž„ αž™αžΎαž„αž“αžΉαž„αž‰αŸ‚αž€αžŸαžΆαžšαž…αžΌαž› αžŠαŸ„αž™αž‘αž‘αž½αž›αž”αžΆαž“ hash (key-value pairs) αž–αžΈαžœαžΆ αžŠαŸ‚αž›αž™αžΎαž„αž’αžΆαž…αž’αŸ’αžœαžΎαž€αžΆαžšαž”αžΆαž“αžšαž½αž…αž αžΎαž™ αž–αŸ„αž›αž‚αžΊαž§αŸ” αžšαž»αŸ‡αžšαžΎαžαžΆαž˜αž›αž€αŸ’αžαžαžŽαŸ’αžŒαŸ” αž αžΎαž™αž“αŸ…αž€αŸ’αž“αž»αž„αž•αŸ’αž“αŸ‚αž€αž›αž‘αŸ’αž’αž•αž› αž™αžΎαž„αž“αžΉαž„αž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸαžŸαžΆαžš αž αžΎαž™αž•αŸ’αž‰αžΎαž“αžΈαž˜αž½αž™αŸ—αž‘αŸ…αž€αžΆαž“αŸ‹αž”αŸ‰αž»αžŸαŸ’αžαž·αŸαžšαž”αžŸαŸ‹αžαŸ’αž›αž½αž“αŸ”

αž‰αŸ‚αž€αžŸαžΆαžšαž‡αžΆαž˜αž½αž™ 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 αŸ” αž€αžΆαžšαž–αž·αž–αžŽαŸŒαž“αžΆαžšαž”αžŸαŸ‹αž–αž½αž€αž‚αŸ αž€αŸαžŠαžΌαž…αž‡αžΆαž‚αŸ†αžšαžΌαž•αŸ’αžŸαŸαž„αž‘αŸ€αžαž’αžΆαž…αžšαž€αž”αžΆαž“αž“αŸ…αž‘αžΈαž“αŸαŸ‡ αž“αŸ…αž‘αžΈαž“αŸαŸ‡

αž₯αž‘αžΌαžœαž“αŸαŸ‡ αž†αŸ’αž›αž„αž€αžΆαžαŸ‹αžαž˜αŸ’αžšαž„αž“αŸαŸ‡ αžαŸ’αžŸαŸ‚αž’αž€αŸ’αžŸαžšαžšαž”αžŸαŸ‹αž™αžΎαž„αž“αžΉαž„αž”αŸ’αžšαŸ‚αž‘αŸ…αž‡αžΆ hash αž“αŸƒαžœαžΆαž›αž…αŸ†αž“αž½αž“αž”αžΈαŸ– message_id, message_type, message_textαŸ”

αž–αž½αž€αžœαžΆαž“αžΉαž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž„αŸ’αž αžΆαž‰αž“αŸ…αž€αŸ’αž“αž»αž„αž•αŸ’αž“αŸ‚αž€αž›αž‘αŸ’αž’αž•αž›αŸ”

αž€αžΆαžšαž”αž‰αŸ’αž‡αžΌαž“αžŸαžΆαžšαž‘αŸ…αž€αžΆαž“αŸ‹αž•αŸ’αž“αŸ‚αž€αž›αž‘αŸ’αž’αž•αž›αžŠαŸ„αž™αž”αŸ’αžšαžΎαž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆ if

αž“αŸ…αž€αŸ’αž“αž»αž„αž•αŸ’αž“αŸ‚αž€αž›αž‘αŸ’αž’αž•αž› αžŠαžΌαž…αžŠαŸ‚αž›αž™αžΎαž„αž…αž„αž…αžΆαŸ† αž™αžΎαž„αž“αžΉαž„αž”αŸ†αž”αŸ‚αž€αžŸαžΆαžšαž‡αžΆαž–αžΈαžšαžŸαŸ’αž‘αŸ’αžšαžΈαž˜αŸ” αž˜αž½αž™αž…αŸ†αž“αž½αž“ - αžŠαŸ‚αž›αž‡αžΆ iNFO αž“αžΉαž„αž…αŸαž‰αž‘αŸ…αž€αžΆαž“αŸ‹αž€αž»αž„αžŸαžΌαž› αž αžΎαž™αžŠαŸ„αž™αž˜αžΆαž“αž€αŸ†αž αž»αžŸ αž™αžΎαž„αž“αžΉαž„αž”αž‰αŸ’αž…αŸαž‰αž‘αŸ…αž―αž€αžŸαžΆαžšαž˜αž½αž™αŸ”

αžαžΎαž™αžΎαž„αž”αŸ‚αž„αž…αŸ‚αž€αžŸαžΆαžšαž‘αžΆαŸ†αž„αž“αŸαŸ‡αžŠαŸ„αž™αžšαž”αŸ€αž”αžŽαžΆ? αž›αž€αŸ’αžαžαžŽαŸ’αžŒαž“αŸƒαž”αž‰αŸ’αž αžΆαž”αžΆαž“αžŽαŸ‚αž“αžΆαŸ†αžŠαŸ†αžŽαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αžšαž½αž…αž αžΎαž™ - αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž–αžΈαž‘αžΆαŸ†αž„αž’αžŸαŸ‹ αž™αžΎαž„αž˜αžΆαž“αž”αŸ’αžšαž’αž”αŸ‹αž”αŸ’αžšαž—αŸαž‘ message_type αž‡αžΆαž€αŸ‹αž›αžΆαž€αŸ‹αžšαž½αž…αž αžΎαž™ αžŠαŸ‚αž›αž’αžΆαž…αž‘αž‘αž½αž›αž™αž€αž”αžΆαž“αžαŸ‚αž–αžΈαžšαžαž˜αŸ’αž›αŸƒαž”αŸ‰αž»αžŽαŸ’αžŽαŸ„αŸ‡αŸ– INFO αž“αž·αž„ ERROR αŸ” αžœαžΆαžŸαŸ’αžαž·αžαž“αŸ…αž›αžΎαž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž“αŸαŸ‡ αžŠαŸ‚αž›αž™αžΎαž„αž“αžΉαž„αž’αŸ’αžœαžΎαž€αžΆαžšαž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸαžŠαŸ„αž™αž”αŸ’αžšαžΎαž–αžΆαž€αŸ’αž™ if statementαŸ”

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

αž”αž“αŸ’αžαŸ‚αž˜αž˜αžαž·αž™αŸ„αž”αž›αŸ‹