ืคึผืจืึทืงื˜ื™ืฉ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ืคื•ืŸ ELK. ื‘ืึทืฉื˜ืขื˜ื™ืงืŸ ืœืึธื’ืกื˜ืืฉ

ื”ืงื“ืžื”

ื‘ืฉืขืช ื“ื™ืคึผืœื•ื™ื™ื ื’ ืืŸ ืื ื“ืขืจ ืกื™ืกื˜ืขื, ืžื™ืจ ื–ืขื ืขืŸ ืคื™ื™ืกื˜ ืžื™ื˜ ื“ื™ ื ื•ื™ื˜ ืฆื• ืคึผืจืึธืฆืขืก ืึท ื’ืจื•ื™ืก ื ื•ืžืขืจ ืคื•ืŸ ืคืึทืจืฉื™ื“ืขื ืข ืœืึธื’ืก. ELK ืื™ื– ืื•ื™ืกื“ืขืจื•ื•ื™ื™ืœื˜ ื•ื•ื™ ื“ื™ ื’ืขืฆื™ื™ึทื’. ื“ืขืจ ืึทืจื˜ื™ืงืœ ื•ื•ืขื˜ ื“ื™ืกืงื•ื˜ื™ืจืŸ ืื•ื ื“ื–ืขืจ ื“ืขืจืคืึทืจื•ื ื’ ืื™ืŸ ื‘ืึทืฉื˜ืขื˜ื™ืงืŸ ื“ืขื ืึธื ืœื™ื™ื’ืŸ.

ืžื™ืจ ืฉื˜ืขืœืŸ ื ื™ืฉื˜ ืึท ืฆื™ืœ ืฆื• ื‘ืึทืฉืจื™ื™ึทื‘ืŸ ืึทืœืข ื–ื™ื™ึทืŸ ืงื™ื™ืคึผืึทื‘ื™ืœืึทื˜ื™ื–, ืึธื‘ืขืจ ืžื™ืจ ื•ื•ื™ืœืŸ ืฆื• ืงืึทื ืกืึทื ื˜ืจื™ื™ื˜ ืกืคึผืึทืกื™ืคื™ืงืœื™ ืื•ื™ืฃ ืกืึทืœื•ื•ื™ื ื’ ืคึผืจืึทืงื˜ื™ืฉ ืคึผืจืึธื‘ืœืขืžืก. ื“ืึธืก ืื™ื– ืจืขื›ื˜ ืฆื• ื“ืขื ืคืึทืงื˜ ืึทื– ื›ืึธื˜ืฉ ืขืก ืื™ื– ืึท ื’ืึทื ืฅ ื’ืจื•ื™ืก ืกื•ืžืข ืคื•ืŸ โ€‹โ€‹ื“ืึทืงื™ื•ืžืขื ื˜ื™ื™ืฉืึทืŸ ืื•ืŸ ืคืึทืจื˜ื™ืง ื‘ื™ืœื“ืขืจ, ืขืก ื–ืขื ืขืŸ ื’ืึทื ืฅ ืึท ืคึผืœืึทืฅ ืคื•ืŸ ืคึผื™ื˜ืคืึธืœื–, ืื™ืŸ ืžื™ื ื“ืกื˜ืขืจ ืžื™ืจ ื’ืขืคึฟื•ื ืขืŸ ื–ื™ื™.

ืžื™ืจ ื“ื™ืคึผืœื•ื™ื“ ื“ืขื ืึธื ืœื™ื™ื’ืŸ ื“ื•ืจืš docker-compose. ื“ืขืจืฆื•, ืžื™ืจ ื”ืึธื‘ืŸ ืึท ื’ืขื–ื•ื ื˜-ื’ืขืฉืจื™ื‘ืŸ docker-compose.yml, ื•ื•ืึธืก ืขืจืœื•ื™ื‘ื˜ ืื•ื ื“ื– ืฆื• ื›ืึทืคึผืŸ ื“ืขื ืึธื ืœื™ื™ื’ืŸ ื›ึผืžืขื˜ ืึธืŸ ืคืจืื‘ืœืขืžืขืŸ. ืื•ืŸ ืขืก ื’ืขื•ื•ืขืŸ ืฆื• ืื•ื ื“ื– ืึทื– ื ืฆื—ื•ืŸ ืื™ื– ืฉื•ื™ืŸ ื ืึธืขื ื˜, ืื™ืฆื˜ ืžื™ืจ ื•ื•ืขื˜ ื˜ื•ื•ื™ืง ืขืก ืึท ื‘ื™ืกืœ ืฆื• ืคึผืึทืกืŸ ืื•ื ื“ื–ืขืจ ื‘ืื“ืขืจืคืขื ื™ืฉืŸ ืื•ืŸ ืึทื– ืก ืขืก.

ืฆื•ื ื‘ืึทื“ื•ื™ืขืจืŸ, ื“ืขืจ ืคึผืจื•ื•ื•ืŸ ืฆื• ืงืึทื ืคื™ื’ื™ืขืจ ื“ื™ ืกื™ืกื˜ืขื ืฆื• ื‘ืึทืงื•ืžืขืŸ ืื•ืŸ ืคึผืจืึธืฆืขืก ืœืึธื’ืก ืคึฟื•ืŸ ืื•ื ื“ื–ืขืจ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ืื™ื– ื ื™ืฉื˜ ื’ืœื™ื™ืš ื’ืขืจืึธื˜ืŸ. ื“ืขืจื™ื‘ืขืจ, ืžื™ืจ ื‘ืึทืฉืœืึธืกืŸ ืึทื– ืขืก ืื™ื– ื•ื•ืขืจื˜ ืฆื• ืœืขืจื ืขืŸ ื™ืขื“ืขืจ ืงืึธืžืคึผืึธื ืขื ื˜ ืกืขืคึผืขืจืึทื˜ืœื™, ืื•ืŸ ื“ืขืžืึธืœื˜ ืฆื•ืจื™ืงืงื•ืžืขืŸ ืฆื• ื–ื™ื™ืขืจ ืงืึทื ืขืงืฉืึทื ื–.

ืึทื–ื•ื™, ืžื™ืจ ืื ื’ืขื”ื•ื™ื‘ืŸ ืžื™ื˜ ืœืึธื’ืกื˜ืึทืฉ.

ืกื•ื•ื™ื•ื•ืข, ื“ื™ืคึผืœื•ื™ืžืึทื ื˜, ืคืœื™ืกื ื“ื™ืง Logstash ืื™ืŸ ืึท ืงืึทื ื˜ื™ื™ื ืขืจ

ืคึฟืึทืจ ื“ื™ืคึผืœื•ื™ืžืึทื ื˜ ืžื™ืจ ื ื•ืฆืŸ docker-compose; ื“ื™ ื™ืงืกืคึผืขืจืึทืžืึทื ืฅ ื“ื™ืกืงืจื™ื™ื‘ื“ ื“ืึธ ื–ืขื ืขืŸ ื“ื•ืจื›ื’ืขืงืึธื›ื˜ ืื•ื™ืฃ MacOS ืื•ืŸ Ubuntu 18.0.4.

ื“ื™ ืœืึธื’ืกื˜ืึทืฉ ื‘ื™ืœื“ ื•ื•ืึธืก ืื™ื– ื’ืขื•ื•ืขืŸ ืจืขื’ื™ืกื˜ืจื™ืจื˜ ืื™ืŸ ืื•ื ื“ื–ืขืจ ืึธืจื™ื’ื™ื ืขืœ docker-compose.yml ืื™ื– docker.elastic.co/logstash/logstash:6.3.2

ืžื™ืจ ื•ื•ืขืœืŸ ื ื•ืฆืŸ ืขืก ืคึฟืึทืจ ื™ืงืกืคึผืขืจืึทืžืึทื ืฅ.

ืžื™ืจ ื’ืขืฉืจื™ื‘ืŸ ืึท ื‘ืึทื–ื•ื ื“ืขืจ docker-compose.yml ืฆื• ืœื•ื™ืคืŸ logstash. ื“ืึธืš, ืขืก ืื™ื– ืžืขื’ืœืขืš ืฆื• ืงืึทื˜ืขืจ ื“ื™ ื‘ื™ืœื“ ืคึฟื•ืŸ ื“ื™ ื‘ืึทืคึฟืขืœืŸ ืฉื•ืจื”, ืึธื‘ืขืจ ืžื™ืจ ื”ืึธื‘ืŸ ืกืึทืœื•ื•ื“ ืึท ืกืคึผืขืฆื™ืคื™ืฉ ืคึผืจืึธื‘ืœืขื, ื•ื•ื• ืžื™ืจ ืœื•ื™ืคืŸ ืึทืœืฅ ืคึฟื•ืŸ ื“ืึธืงืขืจ-ืงืึธืžืคึผืึธืกืข.

ื‘ืขืงื™ืฆืขืจ ื•ื•ืขื’ืŸ ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ ื˜ืขืงืขืก

ื•ื•ื™ ื’ื™ื™ื˜ ืคื•ืŸ ื“ื™ ื‘ืึทืฉืจื™ื™ึทื‘ื•ื ื’, ืœืึธื’ืกื˜ืึทืฉ ืงืขื ืขืŸ ื–ื™ื™ืŸ ืœื•ื™ืคืŸ ืึธื“ืขืจ ืคึฟืึทืจ ืื™ื™ืŸ ืงืึทื ืึทืœ, ืื™ืŸ ื•ื•ืึธืก ืคืึทืœ ืขืก ื“ืึทืจืฃ ืฆื• ืคืึธืจืŸ ื“ื™ *.conf ื˜ืขืงืข, ืึธื“ืขืจ ืคึฟืึทืจ ืขื˜ืœืขื›ืข ื˜ืฉืึทื ืึทืœื–, ืื™ืŸ ื•ื•ืึธืก ืคืึทืœ ืขืก ื“ืึทืจืฃ ืฆื• ืคืึธืจืŸ ื“ื™ pipelines.yml ื˜ืขืงืข, ื•ื•ืึธืก, ืื™ืŸ ืงืขืจ , ื•ื•ืขื˜ ืœื™ื ืง ืฆื• ื“ื™ ื˜ืขืงืขืก .conf ืคึฟืึทืจ ื™ืขื“ืขืจ ืงืึทื ืึทืœ.
ืžื™ ืจ ื”ืื‘ ืŸ ื’ืขื ื•ืžืข ืŸ ื“ืข ื ืฆืฐืฒื˜ ืŸ ืฐืขื’ . ืขืก ื’ืขื•ื•ืขืŸ ืฆื• ืื•ื ื“ื– ืžืขืจ ื•ื ื™ื•ื•ืขืจืกืึทืœ ืื•ืŸ ืกืงืึทืœืึทื‘ืœืข. ื“ืขืจื™ื‘ืขืจ, ืžื™ืจ ื‘ืืฉืืคืŸ pipelines.yml, ืื•ืŸ ื’ืขืžืื›ื˜ ืึท ืคึผื™ื™ืคึผืœื™ื™ื ื– ื•ื•ืขื’ื•ื•ื™ื™ึทื–ืขืจ ืื™ืŸ ื•ื•ืึธืก ืžื™ืจ ื•ื•ืขืœืŸ ืฉื˜ืขืœืŸ .conf ื˜ืขืงืขืก ืคึฟืึทืจ ื™ืขื“ืขืจ ืงืึทื ืึทืœ.

ื™ืŸ ื“ืขืจ ืงืึทื ื˜ื™ื™ื ืขืจ ืขืก ืื™ื– ืืŸ ืื ื“ืขืจ ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ ื˜ืขืงืข - logstash.yml. ืžื™ืจ ืึธื ืจื™ืจืŸ ืขืก ื ื™ืฉื˜, ืžื™ืจ ื ื•ืฆืŸ ืขืก ื•ื•ื™ ืขืก ืื™ื–.

ืึทื–ื•ื™, ืื•ื ื“ื–ืขืจ ื•ื•ืขื’ื•ื•ื™ื™ึทื–ืขืจ ืกื˜ืจื•ืงื˜ื•ืจ:

ืคึผืจืึทืงื˜ื™ืฉ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ืคื•ืŸ ELK. ื‘ืึทืฉื˜ืขื˜ื™ืงืŸ ืœืึธื’ืกื˜ืืฉ

ืฆื• ื‘ืึทืงื•ืžืขืŸ ืึทืจื™ื™ึทื ืฉืจื™ื™ึทื‘ ื“ืึทื˜ืŸ, ืื™ืฆื˜ ืžื™ืจ ื™ื‘ืขืจื ืขืžืขืŸ ืึทื– ื“ืึธืก ืื™ื– tcp ืื•ื™ืฃ ืคึผืึธืจื˜ 5046, ืื•ืŸ ืคึฟืึทืจ ืคึผืจืึธื“ื•ืงืฆื™ืข ืžื™ืจ ื•ื•ืขืœืŸ ื ื•ืฆืŸ ืกื˜ื“ืึธื•ื˜.

ื“ืึธ ืื™ื– ืึท ืคึผืฉื•ื˜ ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ ืคึฟืึทืจ ื“ืขืจ ืขืจืฉื˜ืขืจ ืงืึทื˜ืขืจ. ื•ื•ื™ื™ึทืœ ื“ื™ ืขืจืฉื˜ ืึทืจื‘ืขื˜ ืื™ื– ืฆื• ืงืึทื˜ืขืจ.

ืึทื–ื•ื™, ืžื™ืจ ื”ืึธื‘ืŸ ื“ืขื 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. ืžื™ืจ ืฉืึทืคึฟืŸ ืื™ื™ืŸ ืœืึธื’ืกื˜ืืฉ ื“ื™ื ืกื˜ (s) ืคึฟื•ืŸ ื“ื™ 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 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 ืขื ื“ืคึผื•ื™ื ื˜ {:port=>9600}
logstash_one_channel | [2019-04-29T11:29:04,478][INFO ][logstash.outputs.elasticsearch] ืคืœื™ืกื ื“ื™ืง ื’ืขื–ื•ื ื˜ ื˜ืฉืขืง ืฆื• ื–ืขืŸ ืื•ื™ื‘ ืึทืŸ Elasticsearch ืงืฉืจ ืื™ื– ืืจื‘ืขื˜ืŸ {:healthcheck_url=>http://elasticsearch:9200/, :path=> "/"}
logstash_one_channel | [2019-04-29T11:29:04,487][WARN ][logstash.outputs.elasticsearch] ืคึผืจื•ื•ื•ืŸ ืฆื• ืจืขื–ืขืจืขืงื˜ ื“ื™ ืงืฉืจ ืฆื• ื˜ื•ื™ื˜ ES ื‘ื™ื™ึทืฉืคึผื™ืœ, ืึธื‘ืขืจ ืึท ื˜ืขื•ืช. {: URL=>"ื’ื•ืžืข ื–ื•ื›ืŸ:9200/", :error_type=>LogStash::Outputs::ElasticSearch::HttpClient::Pool::HostUnreachableError, :error=>"Elasticsearch Unreachable: [http://elasticsearch:9200/][Manticore::ResolutionFailure] elasticsearch"}
logstash_one_channel | [2019-04-29T11:29:04,704][INFO ][logstash.licensechecker.licensereader] ืคืœื™ืกื ื“ื™ืง ื’ืขื–ื•ื ื˜ ื˜ืฉืขืง ืฆื• ื–ืขืŸ ืื•ื™ื‘ ืึทืŸ Elasticsearch ืงืฉืจ ืื™ื– ืืจื‘ืขื˜ืŸ {:healthcheck_url=>http://elasticsearch:9200/, :path=> "/"}
logstash_one_channel | [2019-04-29T11:29:04,710][WARN ][logstash.licensechecker.licensereader] ืคึผืจื•ื•ื•ืŸ ืฆื• ืจืขื–ืขืจืขืงื˜ ื“ื™ ืงืฉืจ ืฆื• ื˜ื•ื™ื˜ ES ื‘ื™ื™ึทืฉืคึผื™ืœ, ืึธื‘ืขืจ ืึท ื˜ืขื•ืช. {: URL=>"ื’ื•ืžืข ื–ื•ื›ืŸ:9200/", :error_type=>LogStash::Outputs::ElasticSearch::HttpClient::Pool::HostUnreachableError, :error=>"Elasticsearch Unreachable: [http://elasticsearch:9200/][Manticore::ResolutionFailure] elasticsearch"}

ืื•ืŸ ืื•ื ื“ื–ืขืจ ืงืœืึธืฅ ืื™ื– ืงืจื™ืคึผื™ื ื’ ืึทืจื•ื™ืฃ ืึทืœืข ื“ื™ ืฆื™ื™ึทื˜.

ื“ืึธ ืื™ืš ื›ื™ื™ืœื™ื™ื˜ื™ื“ ืื™ืŸ ื’ืจื™ืŸ ื“ื™ ืึธื ื–ืึธื’ ืึทื– ื“ื™ ืจืขืจื  - ืœื™ื ื™ืข ืื™ื– ืœืึธื ื˜ืฉื˜ ื”ืฆืœื—ื”, ืื™ืŸ ืจื•ื™ื˜ ื“ื™ ื˜ืขื•ืช ืึธื ื–ืึธื’ ืื•ืŸ ืื™ืŸ ื’ืขืœ ื“ื™ ืึธื ื–ืึธื’ ื•ื•ืขื’ืŸ ืึทืŸ ืคึผืจื•ื•ื•ืŸ ืฆื• ืงืึธื ื˜ืึทืงื˜ ื’ื•ืžืข ื–ื•ื›ืŸ: ืงืกื ื•ืžืงืก.
ื“ืึธืก ื›ืึทืคึผืึทื ื– ื•ื•ื™ื™ึทืœ 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
   }
  }

ืจื™ื˜ืจื™ื•ื•ื™ื ื’ ื“ืึทื˜ืŸ ืคื•ืŸ ืึท ื˜ืขืงืข

ืžื™ืจ ืื•ื™ืš ื‘ืึทืฉืœืึธืกืŸ ืฆื• ืงื•ืงืŸ ืื™ืŸ ื“ื™ ื˜ืขืงืข ืžืึธื“ืข. ืื•ื™ื‘ ืขืก ืึทืจื‘ืขื˜ ืคื™ื™ึทืŸ ืžื™ื˜ ื“ืขืจ ื˜ืขืงืข, ื˜ืึธืžืขืจ ืงื™ื™ืŸ ืึทื’ืขื ื˜ ืื™ื– ื“ืืจืฃ, ืœืคึผื—ื•ืช ืคึฟืึทืจ ื”ื™ื’ืข ื ื•ืฆืŸ.

ืœื•ื™ื˜ ื“ื™ ื‘ืึทืฉืจื™ื™ึทื‘ื•ื ื’, ื“ื™ ืึทืคึผืขืจื™ื™ื˜ื™ื ื’ ืžืึธื“ืข ื–ืึธืœ ื–ื™ื™ืŸ ืขื ืœืขืš ืฆื• ืขืง -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"
   }
  }

ื“ืขืจืฆื•, ืขืก ืื™ื– ืึท ื ื•ืึทื ืก: ื“ืึธืก ื‘ืœื•ื™ื– ืึทืคืขืงืฅ ื ื™ื™ึทืข ื˜ืขืงืขืก ื•ื•ืึธืก ืœืึธื’ืกื˜ืึทืฉ ื”ืื˜ ื ื™ืฉื˜ ื ืึธืš ื’ืขื–ืขืŸ. ืคึฟืึทืจ ื“ื™ ื–ืขืœื‘ืข ื˜ืขืงืขืก ื•ื•ืึธืก ื–ืขื ืขืŸ ืฉื•ื™ืŸ ืื™ืŸ ื“ื™ ืคืขืœื“ ืคื•ืŸ ืžื™ื™ื ื•ื ื’ ืคื•ืŸ ืœืึธื’ืกื˜ืึทืฉ, ืขืก ื”ืื˜ ืฉื•ื™ืŸ ื“ืขืจืžืื ื˜ ื–ื™ื™ืขืจ ื’ืจื™ื™ืก ืื•ืŸ ื•ื•ืขื˜ ืื™ืฆื˜ ื ืึธืจ ื ืขืžืขืŸ ื ื™ื™ึท ืื™ื™ื ืกืŸ ืื™ืŸ ื–ื™ื™.

ื–ืืœ ืก ื”ืึทืœื˜ืŸ ื“ืึธ ืื•ืŸ ืœืขืจื ืขืŸ ื“ื™ ืึทืจื™ื™ึทื ืฉืจื™ื™ึทื‘ ืึธืคึผื˜ื™ื™ืœื•ื ื’. ืขืก ื–ืขื ืขืŸ ื ืึธืš ืคื™ืœืข ืึธืคึผืฆื™ืขืก, ืึธื‘ืขืจ ื“ืึธืก ืื™ื– ื’ืขื ื•ื’ ืคึฟืึทืจ ืื•ื ื“ื– ืคึฟืึทืจ ื•ื•ื™ื™ึทื˜ืขืจ ื™ืงืกืคึผืขืจืึทืžืึทื ืฅ ืื™ืฆื˜.

ืจื•ื˜ื™ื ื’ ืื•ืŸ ื“ืึทื˜ืึท ื˜ืจืึทื ืกืคืึธืจืžืึทืฆื™ืข

ื–ืืœ ืก ืคึผืจื•ื‘ื™ืจืŸ ืฆื• ืกืึธืœื•ื•ืข ื“ื™ ืคืืœื’ืขื ื“ืข ืคึผืจืึธื‘ืœืขื, ืœืึธื–ืŸ ืก ื–ืึธื’ืŸ ืžื™ืจ ื”ืึธื‘ืŸ ืึทืจื˜ื™ืงืœืขืŸ ืคื•ืŸ ืื™ื™ืŸ ืงืึทื ืึทืœ, ืขื˜ืœืขื›ืข ืคื•ืŸ โ€‹โ€‹ื–ื™ื™ ื–ืขื ืขืŸ ื™ื ืคืึธืจืžืึทื˜ื™ื•ื•, ืื•ืŸ ืขื˜ืœืขื›ืข ื–ืขื ืขืŸ ื˜ืขื•ืช ืึทืจื˜ื™ืงืœืขืŸ. ื–ื™ื™ ืึทื ื“ืขืจืฉ ื“ื•ืจืš ืงื•ื•ื™ื˜ืœ. ืขื˜ืœืขื›ืข ื–ืขื ืขืŸ ืื™ื ืคึฟืึธืจืžืึทืฆื™ืข, ืื ื“ืขืจืข ื–ืขื ืขืŸ ื˜ืขื•ืช.

ืžื™ืจ ื“ืึทืจืคึฟืŸ ืฆื• ื‘ืึทื–ื•ื ื“ืขืจ ื–ื™ื™ ื‘ื™ื™ึท ื“ื™ ืึทืจื•ื™ืกื’ืึทื ื’. ื™ืขื ืข. ืžื™ืจ ืฉืจื™ื™ึทื‘ืŸ ืื™ื ืคึฟืึธืจืžืึทืฆื™ืข ืึทืจื˜ื™ืงืœืขืŸ ืื™ืŸ ืื™ื™ืŸ ืงืึทื ืึทืœ, ืื•ืŸ ื˜ืขื•ืช ืึทืจื˜ื™ืงืœืขืŸ ืื™ืŸ ืื ื“ืขืจืŸ.

ืฆื• ื˜ืึธืŸ ื“ืึธืก, ืžืึทืš ืคื•ืŸ ื“ื™ ืึทืจื™ื™ึทื ืฉืจื™ื™ึทื‘ ืึธืคึผื˜ื™ื™ืœื•ื ื’ ืฆื• ืคื™ืœื˜ืขืจ ืื•ืŸ ืจืขื–ื•ืœื˜ืึทื˜.

ื ื™ืฆืŸ ื“ื™ ืคื™ืœื˜ืขืจ ืึธืคึผื˜ื™ื™ืœื•ื ื’, ืžื™ืจ ื•ื•ืขืœืŸ ืคึผืึทืจืก ื“ื™ ื™ื ืงืึทืžื™ื ื’ ืึธื ื–ืึธื’, ืงืจื™ื’ืŸ ืึท ื”ืึทืฉ (ืฉืœื™ืกืœ-ื•ื•ืขืจื˜ ืคึผืขืจื–), ื•ื•ืึธืก ืžื™ืจ ืงืขื ืขืŸ ืฉื•ื™ืŸ ืึทืจื‘ืขื˜ืŸ ืžื™ื˜, ื“.ื”. ื“ื™ืกืึทืกืขืžื‘ืึทืœ ืœื•ื™ื˜ ืฆื• ื‘ืื“ื™ื ื’ื•ื ื’ืขืŸ. ืื•ืŸ ืื™ืŸ ื“ืขืจ ืจืขื–ื•ืœื˜ืึทื˜ ืึธืคึผื˜ื™ื™ืœื•ื ื’, ืžื™ืจ ื•ื•ืขืœืŸ ืื•ื™ืกืงืœื™ื™ึทื‘ืŸ ืึทืจื˜ื™ืงืœืขืŸ ืื•ืŸ ืฉื™ืงืŸ ื™ืขื“ืขืจ ืฆื• ื–ื™ื™ืŸ ืื™ื™ื’ืขื ืข ืงืึทื ืึทืœ.

ืคึผืึทืจืกื™ื ื’ ืึท ืึธื ื–ืึธื’ ืžื™ื˜ ื’ืจืึธืง

ืื™ืŸ ืกื“ืจ ืฆื• ืคึผืึทืจืก ื˜ืขืงืกื˜ ืกื˜ืจื™ื ื’ืก ืื•ืŸ ื‘ืึทืงื•ืžืขืŸ ืึท ืกื›ื•ื ืคื•ืŸ ืคืขืœื“ืขืจ ืคึฟื•ืŸ ื–ื™ื™, ืขืก ืื™ื– ืึท ืกืคึผืขืฆื™ืขืœ ืคึผืœื•ื’ื™ืŸ ืื™ืŸ ื“ื™ ืคื™ืœื˜ืขืจ ืึธืคึผื˜ื™ื™ืœื•ื ื’ - grok.

ืึธืŸ ื‘ืึทืฉื˜ืขื˜ื™ืงืŸ ื–ื™ืš ื“ืขื ืฆื™ืœ ืฆื• ื’ืขื‘ืŸ ืึท ื“ื™ื˜ื™ื™ืœื“ ื‘ืึทืฉืจื™ื™ึทื‘ื•ื ื’ ืคื•ืŸ ืขืก ื“ืึธ (ืคึฟืึทืจ ื“ืขื ืื™ืš ืึธืคึผืฉื™ืงืŸ ืฆื• ื‘ืึทืึทืžื˜ืขืจ ื“ืึทืงื™ื•ืžืขื ื˜ื™ื™ืฉืึทืŸ), ืื™ืš ื•ื•ืขืœ ื’ืขื‘ืŸ ืžื™ื™ืŸ ืคึผืฉื•ื˜ ื‘ื™ื™ึทืฉืคึผื™ืœ.

ืฆื• ื˜ืึธืŸ ื“ืึธืก, ืื™ืจ ื“ืึทืจืคึฟืŸ ืฆื• ื‘ืึทืฉืœื™ืกืŸ ื“ื™ ืคึฟืึธืจืžืึทื˜ ืคื•ืŸ ื“ื™ ืึทืจื™ื™ึทื ืฉืจื™ื™ึทื‘ ืกื˜ืจื™ื ื’ืก. ืื™ืš ื”ืึธื‘ืŸ ื–ื™ื™ ื•ื•ื™ ื“ืึธืก:

1 ืื™ื ืคึฟืึธืจืžืึทืฆื™ืข ืึธื ื–ืึธื’ 1
2 ื˜ืขื•ืช ืึธื ื–ืึธื’ 2

ื™ืขื ืข. ื“ืขืจ ืื™ื“ืขื ื˜ื™ืคื™ืฆืขืจ ืงื•ืžื˜ ืขืจืฉื˜ืขืจ, ื“ืขืžืึธืœื˜ INFO / ื˜ืขื•ืช, ืื•ืŸ ืขื˜ืœืขื›ืข ื•ื•ืึธืจื˜ ืึธืŸ ืกืคึผื™ื™ืกืึทื–.
ืขืก ืื™ื– ื ื™ืฉื˜ ืฉื•ื•ืขืจ, ืึธื‘ืขืจ ืขืก ืื™ื– ื’ืขื ื•ื’ ืฆื• ืคึฟืึทืจืฉื˜ื™ื™ืŸ ื“ืขื ืคึผืจื™ื ืฆื™ืคึผ ืคื•ืŸ ืึธืคึผืขืจืึทืฆื™ืข.

ืึทื–ื•ื™, ืื™ืŸ ื“ื™ ืคื™ืœื˜ืขืจ ืึธืคึผื˜ื™ื™ืœื•ื ื’ ืคื•ืŸ ื“ื™ ื’ืจืึธืง ืคึผืœื•ื’ื™ืŸ, ืžื™ืจ ืžื•ื–ืŸ ื“ืขืคื™ื ื™ืจืŸ ืึท ืžื•ืกื˜ืขืจ ืคึฟืึทืจ ืคึผืึทืจืกื™ื ื’ ืื•ื ื“ื–ืขืจ ืกื˜ืจื™ื ื’ืก.

ืขืก ื•ื•ืขื˜ ืงื•ืงืŸ ื•ื•ื™ ื“ืึธืก:

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

ื™ืกืขื ืฉืึทืœื™ ืขืก ืก ืึท ืจืขื’ื•ืœืขืจ ืื•ื™ืกื“ืจื•ืง. ื’ืจื™ื™ื˜-ื’ืขืžืื›ื˜ ืคึผืึทื˜ืขืจื ื– ื–ืขื ืขืŸ ื’ืขื ื™ืฆื˜, ืึทื–ืึท ื•ื•ื™ INT, LOGLEVEL, WORD. ื–ื™ื™ืขืจ ื‘ืึทืฉืจื™ื™ึทื‘ื•ื ื’, ื•ื•ื™ ื’ืขื–ื•ื ื˜ ื•ื•ื™ ืื ื“ืขืจืข ืคึผืึทื˜ืขืจื ื–, ืงืขื ืขืŸ ื–ื™ื™ืŸ ื’ืขืคึฟื•ื ืขืŸ ื“ืึธ ื“ืึธ

ืื™ืฆื˜, ื“ื•ืจื›ื’ืขื’ืื ื’ืขืŸ ื“ื•ืจืš ื“ืขื ืคื™ืœื˜ืขืจ, ืื•ื ื“ื–ืขืจ ืฉื˜ืจื™ืงืœ ื•ื•ืขื˜ ื–ื™ื™ืŸ ืึท ื”ืึทืฉ ืคื•ืŸ ื“ืจื™ื™ ืคืขืœื“ืขืจ: message_id, message_type, message_text.

ื–ื™ื™ ื•ื•ืขืœืŸ ื–ื™ื™ืŸ ื’ืขื•ื•ื™ื–ืŸ ืื™ืŸ ื“ื™ ืจืขื–ื•ืœื˜ืึทื˜ ืึธืคึผื˜ื™ื™ืœื•ื ื’.

ืจื•ื˜ื™ื ื’ ืึทืจื˜ื™ืงืœืขืŸ ืฆื• ื“ืขืจ ืจืขื–ื•ืœื˜ืึทื˜ ืึธืคึผื˜ื™ื™ืœื•ื ื’ ื ื™ืฆืŸ ื“ื™ ืื•ื™ื‘ ื‘ืึทืคึฟืขืœ

ืื™ืŸ ื“ืขืจ ืจืขื–ื•ืœื˜ืึทื˜ ืึธืคึผื˜ื™ื™ืœื•ื ื’, ื•ื•ื™ ืžื™ืจ ื’ืขื“ืขื ืงืขืŸ, ืžื™ืจ ื–ืขื ืขืŸ ื’ืขื’ืื ื’ืขืŸ ืฆื• ืฉืคึผืึทืœื˜ืŸ ื“ื™ ืึทืจื˜ื™ืงืœืขืŸ ืื™ืŸ ืฆื•ื•ื™ื™ ืกื˜ืจื™ืžื–. ืขื˜ืœืขื›ืข - ื•ื•ืึธืก ื–ืขื ืขืŸ ื™ื ืคืึธ, ื•ื•ืขื˜ ื–ื™ื™ืŸ ืจืขื–ื•ืœื˜ืึทื˜ ืฆื• ื“ื™ ืงืึทื ืกืึธื•ืœ, ืื•ืŸ ืžื™ื˜ ืขืจืจืึธืจืก, ืžื™ืจ ื•ื•ืขืœืŸ ืจืขื–ื•ืœื˜ืึทื˜ ืฆื• ืึท ื˜ืขืงืข.

ื•ื•ื™ ื˜ืึธืŸ ืžื™ืจ ื‘ืึทื–ื•ื ื“ืขืจ ื“ื™ ืึทืจื˜ื™ืงืœืขืŸ? ื“ืขืจ ืฆื•ืฉื˜ืึทื ื“ ืคื•ืŸ ื“ืขื ืคึผืจืึธื‘ืœืขื ืฉื•ื™ืŸ ืกืึทื’ื“ื–ืฉืขืกืฅ ืึท ืœื™ื™ื–ื•ื ื’ - ื ืึธืš ืึทืœืข, ืžื™ืจ ื”ืึธื‘ืŸ ืฉื•ื™ืŸ ืึท ื“ืขื“ืึทืงื™ื™ื˜ืึทื“ ืึธื ื–ืึธื’_ื˜ื™ืคึผ ืคืขืœื“, ื•ื•ืึธืก ืงืขื ืขืŸ ื ืึธืจ ื ืขืžืขืŸ ืฆื•ื•ื™ื™ ื•ื•ืึทืœื•ืขืก: INFO ืื•ืŸ ERROR. ืขืก ืื™ื– ืื•ื™ืฃ ื“ืขื ื™ืงืขืจ ืึทื– ืžื™ืจ ื•ื•ืขืœืŸ ืžืึทื›ืŸ ืึท ื‘ืจื™ืจื” ื ื™ืฆืŸ ื“ื™ ืื•ื™ื‘ ื•ื™ืกื–ืึธื’ื•ื ื’.

if [message_type] == "ERROR" {
        # ะ—ะดะตััŒ ะฒั‹ะฒะพะดะธะผ ะฒ ั„ะฐะนะป
       } else
     {
      # ะ—ะดะตััŒ ะฒั‹ะฒะพะดะธะผ ะฒ 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

ืœื™ื™ื’ืŸ ืึท ื‘ืึทืžืขืจืงื•ื ื’