ΠŸΡ€Π°ΠΊΡ‚ΠΈΡ‡Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Π½Π° Π½Π° Π•Π›Πš. ΠŸΠΎΡΡ‚Π°Π²ΡƒΠ²Π°ΡšΠ΅ logstash

Π’ΠΎΠ²Π΅Π΄

ΠŸΡ€ΠΈ Ρ€Π°ΡΠΏΠΎΡ€Π΅Π΄ΡƒΠ²Π°ΡšΠ΅Ρ‚ΠΎ Π½Π° Π΄Ρ€ΡƒΠ³ систСм, сС соочивмС со ΠΏΠΎΡ‚Ρ€Π΅Π±Π°Ρ‚Π° Π΄Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΈΠΌΠ΅ Π³ΠΎΠ»Π΅ΠΌ Π±Ρ€ΠΎΡ˜ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Π»ΠΎΠ³ΠΎΠ²ΠΈ. Π•Π›Πš бСшС ΠΈΠ·Π±Ρ€Π°Π½ ΠΊΠ°ΠΊΠΎ Π°Π»Π°Ρ‚ΠΊΠ°. Оваа ΡΡ‚Π°Ρ‚ΠΈΡ˜Π° ќС Π³ΠΎ Ρ€Π°Π·Π³Π»Π΅Π΄Π° Π½Π°ΡˆΠ΅Ρ‚ΠΎ искуство Π²ΠΎ ΠΏΠΎΡΡ‚Π°Π²ΡƒΠ²Π°ΡšΠ΅Ρ‚ΠΎ Π½Π° овој оџак.

НС си поставувамС Ρ†Π΅Π» Π΄Π° Π³ΠΈ опишСмС ситС Π½Π΅Π³ΠΎΠ²ΠΈ способности, Ρ‚ΡƒΠΊΡƒ сакамС Π΄Π° сС ΠΊΠΎΠ½Ρ†Π΅Π½Ρ‚Ρ€ΠΈΡ€Π°ΠΌΠ΅ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎ Π½Π° Ρ€Π΅ΡˆΠ°Π²Π°ΡšΠ΅ Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΡ‡Π½ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ. Ова сС Π΄ΠΎΠ»ΠΆΠΈ Π½Π° Ρ„Π°ΠΊΡ‚ΠΎΡ‚ Π΄Π΅ΠΊΠ° ΠΈΠ°ΠΊΠΎ ΠΈΠΌΠ° ΠΏΡ€ΠΈΠ»ΠΈΡ‡Π½ΠΎ Π³ΠΎΠ»Π΅ΠΌΠ° ΠΊΠΎΠ»ΠΈΡ‡ΠΈΠ½Π° Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡ˜Π° ΠΈ Π³ΠΎΡ‚ΠΎΠ²ΠΈ слики, ΠΈΠΌΠ° доста стапици, Π±Π°Ρ€Π΅ΠΌ Π½ΠΈΠ΅ Π³ΠΈ најдовмС.

Π“ΠΎ распорСдивмС стСкот ΠΏΡ€Π΅ΠΊΡƒ 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. НС Π³ΠΎ Π΄ΠΎΠΏΠΈΡ€Π°ΠΌΠ΅, Π³ΠΎ користимС ΠΊΠ°ΠΊΠΎ ΡˆΡ‚ΠΎ Π΅.

Π—Π½Π°Ρ‡ΠΈ, структурата Π½Π° Π½Π°ΡˆΠΈΠΎΡ‚ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡƒΠΌ:

ΠŸΡ€Π°ΠΊΡ‚ΠΈΡ‡Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Π½Π° Π½Π° Π•Π›Πš. ΠŸΠΎΡΡ‚Π°Π²ΡƒΠ²Π°ΡšΠ΅ 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 ΠΈ исто Ρ‚Π°ΠΊΠ° Π³ΠΎ ΠΏΡ€Π°Π²ΠΈΠΌΠ΅ само Π·Π° Ρ‡ΠΈΡ‚Π°ΡšΠ΅.

ΠŸΡ€Π°ΠΊΡ‚ΠΈΡ‡Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Π½Π° Π½Π° Π•Π›Πš. ΠŸΠΎΡΡ‚Π°Π²ΡƒΠ²Π°ΡšΠ΅ 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

И Π³ΠΎ Π³Π»Π΅Π΄Π°ΠΌΠ΅ ΠΎΠ΄Π³ΠΎΠ²ΠΎΡ€ΠΎΡ‚ Π²ΠΎ ΠΊΠΎΠ½Π·ΠΎΠ»Π°Ρ‚Π° Π½Π° ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€ΠΎΡ‚:

ΠŸΡ€Π°ΠΊΡ‚ΠΈΡ‡Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Π½Π° Π½Π° Π•Π›Πš. ΠŸΠΎΡΡ‚Π°Π²ΡƒΠ²Π°ΡšΠ΅ logstash

Но, Π²ΠΎ исто Π²Ρ€Π΅ΠΌΠ΅, Π³Π»Π΅Π΄Π°ΠΌΠ΅ ΠΈ:

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. Π˜Π½ΡΡ‚Π°Π»ΠΈΡ€Π°Ρ˜Ρ‚Π΅ 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][ΠŸΠ Π•Π”Π£ΠŸΠ Π•Π”Π£Π’ΠΠŠΠ• ][logstash.outputs.elasticsearch] Π‘Π΅ ΠΎΠ±ΠΈΠ΄Π΅ Π΄Π° ја ΠΎΠΆΠΈΠ²Π΅Π΅ врската со ΠΌΡ€Ρ‚Π²ΠΈΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΊ ES, Π½ΠΎ Π΄ΠΎΠ±ΠΈ Π³Ρ€Π΅ΡˆΠΊΠ°. {:url=>β€œΠ΅Π»Π°ΡΡ‚ΠΈΡ‡Π΅Π½ ΠΏΡ€Π΅Π±Π°Ρ€ΡƒΠ²Π°Ρ‡:9200/", :error_type=>LogStash::ИзлСзи::ElasticSearch::HttpClient::Pool::HostUnreachableError, :error=>"Elasticsearch нСдостиТно: [http://elasticsearch:9200/:][Resoureail:] elasticearch"}
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][ΠŸΠ Π•Π”Π£ΠŸΠ Π•Π”Π£Π’ΠΠŠΠ• ][logstash.licensechecker.licensereader] Π‘Π΅ ΠΎΠ±ΠΈΠ΄Π΅ Π΄Π° ја ΠΎΠΆΠΈΠ²Π΅Π΅ врската со ΠΌΡ€Ρ‚Π²ΠΈΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΊ ES, Π½ΠΎ Π΄ΠΎΠ±ΠΈ Π³Ρ€Π΅ΡˆΠΊΠ°. {:url=>β€œΠ΅Π»Π°ΡΡ‚ΠΈΡ‡Π΅Π½ ΠΏΡ€Π΅Π±Π°Ρ€ΡƒΠ²Π°Ρ‡:9200/", :error_type=>LogStash::ИзлСзи::ElasticSearch::HttpClient::Pool::HostUnreachableError, :error=>"Elasticsearch нСдостиТно: [http://elasticsearch:9200/:][Resoureail:] elasticearch"}

И Π½Π°ΡˆΠΈΠΎΡ‚ Π΄Π½Π΅Π²Π½ΠΈΠΊ ΠΏΠΎΡΡ‚ΠΎΡ˜Π°Π½ΠΎ сС ΠΏΡ€ΠΈΠΊΡ€Π°Π΄ΡƒΠ²Π°.

ОвдС ја истакнав со Π·Π΅Π»Π΅Π½ΠΎ ΠΏΠΎΡ€Π°ΠΊΠ°Ρ‚Π° Π΄Π΅ΠΊΠ° гасоводот Π΅ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ стартуван, со Ρ†Ρ€Π²Π΅Π½ΠΎ ΠΏΠΎΡ€Π°ΠΊΠ°Ρ‚Π° Π·Π° Π³Ρ€Π΅ΡˆΠΊΠ° ΠΈ со ΠΆΠΎΠ»Ρ‚Π° ΠΏΠΎΡ€Π°ΠΊΠ°Ρ‚Π° Π·Π° ΠΎΠ±ΠΈΠ΄ Π·Π° ΠΊΠΎΠ½Ρ‚Π°ΠΊΡ‚ СластичСн ΠΏΡ€Π΅Π±Π°Ρ€ΡƒΠ²Π°Ρ‡: 9200.
Ова сС случува Π·Π°Ρ‚ΠΎΠ° ΡˆΡ‚ΠΎ logstash.conf, Π²ΠΊΠ»ΡƒΡ‡Π΅Π½ΠΎ Π²ΠΎ сликата, содрТи ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π·Π° достапноста Π½Π° elasticsearch. На ΠΊΡ€Π°Ρ˜ΠΎΡ‚ Π½Π° ΠΊΡ€Π°ΠΈΡˆΡ‚Π°Ρ‚Π°, logstash прСтпоставува Π΄Π΅ΠΊΠ° Ρ€Π°Π±ΠΎΡ‚ΠΈ ΠΊΠ°ΠΊΠΎ Π΄Π΅Π» ΠΎΠ΄ стСкот Elk, Π½ΠΎ Π½ΠΈΠ΅ Π³ΠΎ Ρ€Π°Π·Π΄Π΅Π»ΠΈΠ²ΠΌΠ΅.

МоТно Π΅ Π΄Π° сС Ρ€Π°Π±ΠΎΡ‚ΠΈ, Π½ΠΎ Π½Π΅ Π΅ ΠΏΠΎΠ³ΠΎΠ΄Π½ΠΎ.

Π Π΅ΡˆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ Π΅ Π΄Π° сС ΠΎΠ½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠΈ ΠΎΠ²Π°Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° ΠΏΡ€Π΅ΠΊΡƒ ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°Ρ‚Π° Π½Π° ΠΎΠΊΠΎΠ»ΠΈΠ½Π°Ρ‚Π° 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. Π¨Ρ‚ΠΎ Π΄Ρ€ΡƒΠ³ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΠΈΠ΄Π΅ интСрСсно ΠΎΠ²Π΄Π΅?

ВСст ΠΏΠΎΡ€Π°ΠΊΠΈ ΠΊΠΎΡ€ΠΈΡΡ‚Π΅Ρ˜ΡœΠΈ Ρ‡ΡƒΠΊΠ°ΡšΠ΅ Π½Π° срцСто

Има Ρ‚ΠΎΠ»ΠΊΡƒ интСрСсна моТност Π΄Π° сС Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π°Π°Ρ‚ автоматски ΠΏΠΎΡ€Π°ΠΊΠΈ Π·Π° Ρ‚Π΅ΡΡ‚ΠΈΡ€Π°ΡšΠ΅.
Π—Π° Π΄Π° Π³ΠΎ Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ ΠΎΠ²Π°, Ρ‚Ρ€Π΅Π±Π° Π΄Π° Π³ΠΎ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΠΈΡ‚Π΅ Π΄ΠΎΠ΄Π°Ρ‚ΠΎΠΊΠΎΡ‚ heartbean Π²ΠΎ Π΄Π΅Π»ΠΎΡ‚ Π·Π° Π²Π½Π΅ΡΡƒΠ²Π°ΡšΠ΅.

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

Π’ΠΊΠ»ΡƒΡ‡Π΅Ρ‚Π΅ Π³ΠΎ, ΠΏΠΎΡ‡Π½Π΅Ρ‚Π΅ Π΄Π° ΠΏΡ€ΠΈΠΌΠ°Ρ‚Π΅ Сднаш Π²ΠΎ ΠΌΠΈΠ½ΡƒΡ‚Π°

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

Ако сакамС Π΄Π° ΠΏΡ€ΠΈΠΌΠ°ΠΌΠ΅ почСсто, Ρ‚Ρ€Π΅Π±Π° Π΄Π° Π³ΠΎ Π΄ΠΎΠ΄Π°Π΄Π΅ΠΌΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Π°Ρ€ΠΎΡ‚ ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π».
Π’Π°ΠΊΠ° ќС Π΄ΠΎΠ±ΠΈΠ²Π°ΠΌΠ΅ ΠΏΠΎΡ€Π°ΠΊΠ° Π½Π° сСкои 10 сСкунди.

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

Π’Ρ€Π°ΡœΠ°ΡšΠ΅ ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ ΠΎΠ΄ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ°

РСшивмС Π΄Π° Π³ΠΎ Ρ€Π°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ ΠΈ Ρ€Π΅ΠΆΠΈΠΌΠΎΡ‚ Π½Π° Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ°. Ако Ρ€Π°Π±ΠΎΡ‚ΠΈ Π΄ΠΎΠ±Ρ€ΠΎ со Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π°, Ρ‚ΠΎΠ³Π°Ρˆ ΠΌΠΎΠΆΠ΅Π±ΠΈ Π½Π΅ Π΅ ΠΏΠΎΡ‚Ρ€Π΅Π±Π΅Π½ Π°Π³Π΅Π½Ρ‚, Π±Π°Ρ€Π΅ΠΌ Π·Π° Π»ΠΎΠΊΠ°Π»Π½Π° ΡƒΠΏΠΎΡ‚Ρ€Π΅Π±Π°.

Π‘ΠΏΠΎΡ€Π΅Π΄ описот, Ρ€Π΅ΠΆΠΈΠΌΠΎΡ‚ Π½Π° Ρ€Π°Π±ΠΎΡ‚Π° Ρ‚Ρ€Π΅Π±Π° Π΄Π° Π±ΠΈΠ΄Π΅ сличСн Π½Π° ΠΎΠΏΠ°ΡˆΠΊΠ°Ρ‚Π° -f, Ρ‚.Π΅. Ρ‡ΠΈΡ‚Π° Π½ΠΎΠ²ΠΈ Ρ€Π΅Π΄ΠΎΠ²ΠΈ ΠΈΠ»ΠΈ, ΠΊΠ°ΠΊΠΎ ΠΎΠΏΡ†ΠΈΡ˜Π°, ја Ρ‡ΠΈΡ‚Π° Ρ†Π΅Π»Π°Ρ‚Π° Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ°.

Π—Π½Π°Ρ‡ΠΈ ΠΎΠ½Π° ΡˆΡ‚ΠΎ сакамС Π΄Π° Π³ΠΎ Π΄ΠΎΠ±ΠΈΠ΅ΠΌΠ΅:

  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 stop logstash_one_channel && docker rm logstash_one_channel), Ρ‚ΠΎΠ³Π°Ρˆ Π½ΠΈΡˆΡ‚ΠΎ Π½Π΅ΠΌΠ° Π΄Π° сС ΠΏΠΎΠ΄ΠΈΠ³Π½Π΅. ΠŸΠΎΠ·ΠΈΡ†ΠΈΡ˜Π°Ρ‚Π° Π½Π° Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π° Π΄ΠΎ која бСшС ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Π½Π° бСшС Π·Π°Ρ‡ΡƒΠ²Π°Π½Π° Π²ΠΎ ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€ΠΎΡ‚. Ако Π³ΠΎ стартуватС ΠΎΠ΄ Π½ΡƒΠ»Π°, ќС ΠΏΡ€ΠΈΡ„Π°ΡœΠ° само Π½ΠΎΠ²ΠΈ Π»ΠΈΠ½ΠΈΠΈ.

Π§ΠΈΡ‚Π°ΡšΠ΅ постоСчки Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠΈ

Π”Π° Ρ€Π΅Ρ‡Π΅ΠΌΠ΅ Π΄Π΅ΠΊΠ° лансирамС logstash Π·Π° ΠΏΡ€Π² ΠΏΠ°Ρ‚, Π½ΠΎ вСќС ΠΈΠΌΠ°ΠΌΠ΅ Π»ΠΎΠ³ΠΎΠ²ΠΈ ΠΈ Π±ΠΈ сакалС Π΄Π° Π³ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΈΠΌΠ΅.
Ако Π³ΠΎ ΠΈΠ·Π²Ρ€ΡˆΠΈΠΌΠ΅ logstash со Π΄Π΅Π»ΠΎΡ‚ Π·Π° Π²Π½Π΅ΡΡƒΠ²Π°ΡšΠ΅ ΡˆΡ‚ΠΎ Π³ΠΎ користСвмС ΠΏΠΎΠ³ΠΎΡ€Π΅, Π½Π΅ΠΌΠ° Π΄Π° Π΄ΠΎΠ±ΠΈΠ΅ΠΌΠ΅ Π½ΠΈΡˆΡ‚ΠΎ. Π‘Π°ΠΌΠΎ Π½ΠΎΠ²ΠΈΡ‚Π΅ Π»ΠΈΠ½ΠΈΠΈ ќС сС ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΡƒΠ²Π°Π°Ρ‚ со logstash.

Π—Π° Π΄Π° ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΏΠΎΠ²Π»Π΅Ρ‡Π°Ρ‚ Π»ΠΈΠ½ΠΈΠΈ ΠΎΠ΄ постоСчки Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠΈ, Ρ‚Ρ€Π΅Π±Π° Π΄Π° Π΄ΠΎΠ΄Π°Π΄Π΅Ρ‚Π΅ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»Π½Π° линија Π²ΠΎ Π΄Π΅Π»ΠΎΡ‚ Π·Π° Π²Π½Π΅ΡΡƒΠ²Π°ΡšΠ΅:

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

ΠŸΠΎΠΊΡ€Π°Ρ˜ Ρ‚ΠΎΠ°, постои Π΅Π΄Π½Π° нијанса: ΠΎΠ²Π° влијаС само Π½Π° Π½ΠΎΠ²ΠΈΡ‚Π΅ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠΈ ΡˆΡ‚ΠΎ logstash сè ΡƒΡˆΡ‚Π΅ Π½Π΅ Π³ΠΈ Π²ΠΈΠ΄Π΅Π». Π—Π° иститС Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠΈ ΡˆΡ‚ΠΎ вСќС Π±Π΅Π° Π²ΠΎ Π²ΠΈΠ΄Π½ΠΎΡ‚ΠΎ ΠΏΠΎΠ»Π΅ Π½Π° logstash, Ρ‚ΠΎΡ˜ вСќС ја Π·Π°ΠΏΠΎΠΌΠ½ΠΈ Π½ΠΈΠ²Π½Π°Ρ‚Π° Π³ΠΎΠ»Π΅ΠΌΠΈΠ½Π° ΠΈ сСга ќС Π·Π΅ΠΌΠ° само Π½ΠΎΠ²ΠΈ записи Π²ΠΎ Π½ΠΈΠ².

АјдС Π΄Π° застанСмС ΠΎΠ²Π΄Π΅ ΠΈ Π΄Π° Π³ΠΎ ΠΏΡ€ΠΎΡƒΡ‡ΠΈΠΌΠ΅ Π΄Π΅Π»ΠΎΡ‚ Π·Π° Π²Π½Π΅ΡΡƒΠ²Π°ΡšΠ΅. Има ΡƒΡˆΡ‚Π΅ ΠΌΠ½ΠΎΠ³Ρƒ ΠΎΠΏΡ†ΠΈΠΈ, Π½ΠΎ Ρ‚ΠΎΠ° Π½ΠΈ Π΅ Π΄ΠΎΠ²ΠΎΠ»Π½ΠΎ Π·Π° ΠΏΠΎΠ½Π°Ρ‚Π°ΠΌΠΎΡˆΠ½ΠΈ СкспСримСнти засСга.

Π ΡƒΡ‚ΠΈΡ€Π°ΡšΠ΅ ΠΈ Ρ‚Ρ€Π°Π½ΡΡ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡ˜Π° Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ

АјдС Π΄Π° сС ΠΎΠ±ΠΈΠ΄Π΅ΠΌΠ΅ Π΄Π° Π³ΠΎ Ρ€Π΅ΡˆΠΈΠΌΠ΅ слСдниот ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ, Π΄Π° Ρ€Π΅Ρ‡Π΅ΠΌΠ΅ Π΄Π΅ΠΊΠ° ΠΈΠΌΠ°ΠΌΠ΅ ΠΏΠΎΡ€Π°ΠΊΠΈ ΠΎΠ΄ Π΅Π΄Π΅Π½ ΠΊΠ°Π½Π°Π», Π½Π΅ΠΊΠΎΠΈ ΠΎΠ΄ Π½ΠΈΠ² сС ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠ²Π½ΠΈ, Π° Π½Π΅ΠΊΠΎΠΈ сС ΠΏΠΎΡ€Π°ΠΊΠΈ Π·Π° Π³Ρ€Π΅ΡˆΠΊΠ°. Π’ΠΈΠ΅ сС Ρ€Π°Π·Π»ΠΈΠΊΡƒΠ²Π°Π°Ρ‚ ΠΏΠΎ ΠΎΠ·Π½Π°ΠΊΠ°. НСкои сС ИНЀО, Π΄Ρ€ΡƒΠ³ΠΈ сС Π“Π Π•Π¨ΠšΠ.

Π’Ρ€Π΅Π±Π° Π΄Π° Π³ΠΈ ΠΎΠ΄Π²ΠΎΠΈΠΌΠ΅ Π½Π° ΠΈΠ·Π»Π΅Π·ΠΎΡ‚. ОниС. На Π΅Π΄Π΅Π½ ΠΊΠ°Π½Π°Π» ΠΏΠΈΡˆΡƒΠ²Π°ΠΌΠ΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠ²Π½ΠΈ ΠΏΠΎΡ€Π°ΠΊΠΈ, Π° Π½Π° Π΄Ρ€ΡƒΠ³ ΠΏΠΎΡ€Π°ΠΊΠΈ Π·Π° Π³Ρ€Π΅ΡˆΠΊΠΈ.

Π—Π° Π΄Π° Π³ΠΎ Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ ΠΎΠ²Π°, прСмСстСтС сС ΠΎΠ΄ Π΄Π΅Π»ΠΎΡ‚ Π·Π° Π²Π½Π΅ΡΡƒΠ²Π°ΡšΠ΅ Π΄ΠΎ Ρ„ΠΈΠ»Ρ‚Π΅Ρ€ ΠΈ ΠΈΠ·Π»Π΅Π·.

ΠšΠΎΡ€ΠΈΡΡ‚Π΅Ρ˜ΡœΠΈ Π³ΠΎ Π΄Π΅Π»ΠΎΡ‚ Π·Π° Ρ„ΠΈΠ»Ρ‚Ρ€ΠΈ, ќС ја Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€Π°ΠΌΠ΅ Π΄ΠΎΡ˜Π΄ΠΎΠ²Π½Π°Ρ‚Π° ΠΏΠΎΡ€Π°ΠΊΠ°, добивајќи Ρ…Π°Ρˆ (ΠΏΠ°Ρ€ΠΎΠ²ΠΈ ΠΊΠ»ΡƒΡ‡-врСдност) ΠΎΠ΄ Π½Π΅Π°, со ΠΊΠΎΠΈ вСќС ΠΌΠΎΠΆΠ΅ΠΌΠ΅ Π΄Π° Ρ€Π°Π±ΠΎΡ‚ΠΈΠΌΠ΅, Ρ‚.Π΅. Ρ€Π°ΡΠΊΠ»ΠΎΠΏΡƒΠ²Π°Ρ˜Ρ‚Π΅ спорСд условитС. И Π²ΠΎ Π΄Π΅Π»ΠΎΡ‚ Π·Π° ΠΈΠ·Π»Π΅Π·, ќС ΠΈΠ·Π±Π΅Ρ€Π΅ΠΌΠ΅ ΠΏΠΎΡ€Π°ΠΊΠΈ ΠΈ ќС ја испратимС сСкоја Π½Π° свој ΠΊΠ°Π½Π°Π».

ΠŸΠ°Ρ€ΡΠΈΡ€Π°ΡšΠ΅ Π½Π° ΠΏΠΎΡ€Π°ΠΊΠ° со Π³Ρ€ΠΎΠΊ

Π—Π° Π΄Π° Π³ΠΈ Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€Π°Ρ‚Π΅ тСкстуалнитС Π½ΠΈΠ·ΠΈ ΠΈ Π΄Π° Π΄ΠΎΠ±ΠΈΠ΅Ρ‚Π΅ Π·Π±ΠΈΡ€ Π½Π° полиња ΠΎΠ΄ Π½ΠΈΠ², Π²ΠΎ Π΄Π΅Π»ΠΎΡ‚ Π·Π° Ρ„ΠΈΠ»Ρ‚Ρ€ΠΈ ΠΈΠΌΠ° посСбСн Π΄ΠΎΠ΄Π°Ρ‚ΠΎΠΊ - Π³Ρ€ΠΎΠΊ.

Π‘Π΅Π· Π΄Π° си поставувам Ρ†Π΅Π» Π΄Π° Π΄Π°Π΄Π°ΠΌ Π΄Π΅Ρ‚Π°Π»Π΅Π½ опис Π·Π° Ρ‚ΠΎΠ° ΠΎΠ²Π΄Π΅ (Π·Π° ΠΎΠ²Π° сС ΠΏΠΎΠ²ΠΈΠΊΡƒΠ²Π°ΠΌ ΠΎΡ„ΠΈΡ†ΠΈΡ˜Π°Π»Π½Π° Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡ˜Π°), ќС Π³ΠΎ Π΄Π°Π΄Π°ΠΌ ΠΌΠΎΡ˜ΠΎΡ‚ СдноставСн ΠΏΡ€ΠΈΠΌΠ΅Ρ€.

Π—Π° Π΄Π° Π³ΠΎ Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ ΠΎΠ²Π°, Ρ‚Ρ€Π΅Π±Π° Π΄Π° ΠΎΠ΄Π»ΡƒΡ‡ΠΈΡ‚Π΅ Π·Π° Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΎΡ‚ Π½Π° Π²Π»Π΅Π·Π½ΠΈΡ‚Π΅ Π½ΠΈΠ·ΠΈ. Π“ΠΈ ΠΈΠΌΠ°ΠΌ Π²Π°ΠΊΠ°:

1 ИНЀО ΠΏΠΎΡ€Π°ΠΊΠ°1
2 ΠŸΠΎΡ€Π°ΠΊΠ° Π·Π° Π“Π Π•Π¨ΠšΠ2

ОниС. ΠŸΡ€Π²ΠΎ Π΄ΠΎΠ°Ρ“Π° ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΡ‚, ΠΏΠΎΡ‚ΠΎΠ° INFO/ERROR, ΠΏΠ° нСкој Π·Π±ΠΎΡ€ Π±Π΅Π· ΠΏΡ€Π°Π·Π½ΠΈ мСста.
НС Π΅ Ρ‚Π΅ΡˆΠΊΠΎ, Π½ΠΎ Π΄ΠΎΠ²ΠΎΠ»Π½ΠΎ Π΅ Π΄Π° сС Ρ€Π°Π·Π±Π΅Ρ€Π΅ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΎΡ‚ Π½Π° Ρ€Π°Π±ΠΎΡ‚Π°.

Π—Π½Π°Ρ‡ΠΈ, Π²ΠΎ Π΄Π΅Π»ΠΎΡ‚ Π·Π° Ρ„ΠΈΠ»Ρ‚Ρ€ΠΈ Π½Π° ΠΏΡ€ΠΈΠΊΠ»ΡƒΡ‡ΠΎΠΊΠΎΡ‚ grok, ΠΌΠΎΡ€Π° Π΄Π° Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ€Π°ΠΌΠ΅ шСма Π·Π° ΠΏΠ°Ρ€ΡΠΈΡ€Π°ΡšΠ΅ Π½Π° Π½Π°ΡˆΠΈΡ‚Π΅ ΠΆΠΈΡ†ΠΈ.

ЌС изглСда вака:

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

Π’ΠΎ ΡΡƒΡˆΡ‚ΠΈΠ½Π° Ρ‚ΠΎΠ° Π΅ Ρ€Π΅Π΄ΠΎΠ²Π΅Π½ ΠΈΠ·Ρ€Π°Π·. Π‘Π΅ користат Π³ΠΎΡ‚ΠΎΠ²ΠΈ обрасци, ΠΊΠ°ΠΊΠΎ ΡˆΡ‚ΠΎ сС INT, LOGLEVEL, WORD. Нивниот опис, ΠΊΠ°ΠΊΠΎ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈ обрасци, ΠΌΠΎΠΆΠ΅ Π΄Π° сС Π½Π°Ρ˜Π΄Π°Ρ‚ ΠΎΠ²Π΄Π΅ Ρ‚ΡƒΠΊΠ°

Π‘Π΅Π³Π°, ΠΏΠΎΠΌΠΈΠ½ΡƒΠ²Π°Ρ˜ΡœΠΈ Π½ΠΈΠ· овој Ρ„ΠΈΠ»Ρ‚Π΅Ρ€, Π½Π°ΡˆΠ°Ρ‚Π° Π½ΠΈΠ·Π° ќС сС ΠΏΡ€Π΅Ρ‚Π²ΠΎΡ€ΠΈ Π²ΠΎ Ρ…Π°Ρˆ ΠΎΠ΄ Ρ‚Ρ€ΠΈ полиња: ΠΏΠΎΡ€Π°ΠΊΠ°_ΠΈΠ΄, ΠΏΠΎΡ€Π°ΠΊΠ°_Ρ‚ΠΈΠΏ, ΠΏΠΎΡ€Π°ΠΊΠ°_тСкст.

Π’ΠΈΠ΅ ќС Π±ΠΈΠ΄Π°Ρ‚ ΠΏΡ€ΠΈΠΊΠ°ΠΆΠ°Π½ΠΈ Π²ΠΎ Π΄Π΅Π»ΠΎΡ‚ Π·Π° ΠΈΠ·Π»Π΅Π·.

Π ΡƒΡ‚ΠΈΡ€Π°ΡšΠ΅ Π½Π° ΠΏΠΎΡ€Π°ΠΊΠΈ Π΄ΠΎ Π΄Π΅Π»ΠΎΡ‚ Π·Π° ΠΈΠ·Π»Π΅Π· ΠΊΠΎΡ€ΠΈΡΡ‚Π΅Ρ˜ΡœΠΈ ја ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° 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

Π”ΠΎΠ΄Π°Π΄Π΅Ρ‚Π΅ ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€