Я надеюсь, что кто-то может помочь мне с установкой связи с ELK в кластере Kubernetes и некоторыми советами о том, как сделать это для следующей задачи:
Jenkins на отдельной машине после выполнения у работы есть файл журнала (не журналы Дженкинса, а некоторые журналы, созданные кодом), которые мне нужно отправить по сети в ELK для его обработки.
Прежде всего я Я новичок в Kubernetes и Elasti c Stack. Я установил Jenkins, ElasticStack (Fluentd, ElasticSearch, Kibana, и они общаются друг с другом, проверено в логах kubernetes). )
В следующем примере Fluentd настроен как DaemonSet - означает, что модуль fluentd будет работать на каждом узле. Я предполагаю, что это предложено для обработки локального файла журнала, который не вариант для меня. Я думаю, что мне нужно развернуть обычный модуль Fluentd и запустить службу, которая делает переадресацию портов на порт Fluentd на узле, это правильно?
Я установил конфигурацию теста для 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-соединения
Спасибо!