Настройка Kubernetes для ElasticSearch и Fluentd: отправка файла пользовательского журнала из jenkins - PullRequest
0 голосов
/ 27 февраля 2020

Я надеюсь, что кто-то может помочь мне с установкой связи с ELK в кластере Kubernetes и некоторыми советами о том, как сделать это для следующей задачи:

Jenkins на отдельной машине после выполнения у работы есть файл журнала (не журналы Дженкинса, а некоторые журналы, созданные кодом), которые мне нужно отправить по сети в ELK для его обработки.

Прежде всего я Я новичок в Kubernetes и Elasti c Stack. Я установил Jenkins, ElasticStack (Fluentd, ElasticSearch, Kibana, и они общаются друг с другом, проверено в логах kubernetes). )

  1. В следующем примере Fluentd настроен как DaemonSet - означает, что модуль fluentd будет работать на каждом узле. Я предполагаю, что это предложено для обработки локального файла журнала, который не вариант для меня. Я думаю, что мне нужно развернуть обычный модуль Fluentd и запустить службу, которая делает переадресацию портов на порт Fluentd на узле, это правильно?

  2. Я установил конфигурацию теста для Fluentd, чтобы принимать TCP-соединение и результаты печати:

  <source>
    @type tcp
    tag "tcp.events"
    port 5000
    bind "0.0.0.0"
    delimiter "\\n"
    <parse>
      @type "regexp"
      expression "/^(?<field>\\w+)$/"
    </parse>
  </source>
  <match **>
    @type stdout
  </match>

Поскольку я не могу подключиться извне, я пытался отправить пакет tcp с узла кластера с помощью kubernetes:

 kubectl exec fluentd-l5r46 echo '123456:awesome' | netcat 0.0.0.0 5000

и наблюдайте результаты в журналах:

kubectl logs pod/fluentd-l5r46

Но никаких новых сообщений там не появляется, только одна инициализация:

2020-02-25 10:52:55 +0000 [info]: parsing config file is succeeded path="/fluentd/etc/fluent.conf"
2020-02-25 10:52:55 +0000 [info]: using configuration file: <ROOT>
  <source>
    @type tcp
    tag "tcp.events"
    port 5000
    bind "0.0.0.0"
    delimiter "\\n"
    <parse>
      @type "regexp"
      expression "/^(?<field>\\w+)$/"
    </parse>
  </source>
  <match **>
    @type stdout
  </match>
</ROOT>
2020-02-25 10:52:55 +0000 [info]: starting fluentd-1.1.3 pid=7 ruby="2.3.3"
2020-02-25 10:52:55 +0000 [info]: spawn command to main:  cmdline=["/usr/bin/ruby2.3", "-Eascii-8bit:ascii-8bit", "/fluentd/vendor/bundle/ruby/2.3.0/bin/fluentd", "-c", "/fluentd/etc/fluent.conf", "-p", "/fluentd/plugins", "--gemfile", "/fluentd/Gemfile", "--under-supervisor"]
2020-02-25 10:52:55 +0000 [info]: gem 'fluent-plugin-elasticsearch' version '2.9.2'
2020-02-25 10:52:55 +0000 [info]: gem 'fluent-plugin-kubernetes_metadata_filter' version '2.0.0'
2020-02-25 10:52:55 +0000 [info]: gem 'fluent-plugin-systemd' version '1.0.0'
2020-02-25 10:52:55 +0000 [info]: gem 'fluentd' version '1.1.3'
2020-02-25 10:52:55 +0000 [info]: adding match pattern="**" type="stdout"
2020-02-25 10:52:55 +0000 [info]: adding source type="tcp"
2020-02-25 10:52:55 +0000 [info]: #0 starting fluentd worker pid=11 ppid=7 worker=0
2020-02-25 10:52:55 +0000 [info]: #0 fluentd worker is now running worker=0
2020-02-25 10:52:55.875310545 +0000 fluent.info: {"worker":0,"message":"fluentd worker is now running worker=0"}

Так что вопрос - это какое-либо предложение относительно архитектуры решения для этой задачи, потому что Я думаю, что я не совсем понимаю, как правильно настроить Fluentd для этого и какие-либо предложения, касающиеся TCP-соединения

Спасибо!

...