Установка Fluentd в Unix/Linux

FluentD — это кроссплатформенное программное обеспечение, с открытым исходным кодом для сбора данных , первоначально разработанный в Treasure Data. Он написан в основном на языке Ruby.

Установка Fluentd в Unix/Linux

Начнем с того, чо установим и настроим кое-что. Так званая пред-установка.

Настройка NTP

НАСТОЯТЕЛЬНО рекомендуется настроить ntpd на ноде, чтобы предотвратить неправильные отметки времени в ваших логах. Вот пример установок:

Установка и настройка NTP на CentOS/Fedora/RedHat

Увеличение количества файловых дескрипторов

Проверить текущий размер, можно с помощью:

$ ulimit -n

Если у вас около 1024, — этого недостаточно. Тогда, открываем:

 $ vim /etc/security/limits.conf

И добавляем следующие строки в файл:

root soft nofile 65536 
root hard nofile 65536 
* soft nofile 65536 
* hard nofile 65536

PS: Стоит перезагрузить компьютер.

Значение которое я выставил (65536 — максимальное значение), — является наиболее хорошим вариантом. Необходимое количество файловых дескрипторов зависит от ваших плагинов и настроек самого FluentD.

Вот полезное чтиво:

Увеличить Max Open File Limit в Unix/Linux

Оптимизация параметров ядра (настройка сети)

Для сред с высокой нагрузкой, состоящих из множества экземпляров Fluentd, следует оптимизировать параметры, для этого открываем:

 $ vim /etc/sysctl.conf

И прописываем:

net.core.somaxconn = 1024
net.core.netdev_max_backlog = 5000
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.ipv4.tcp_wmem = 4096 12582912 16777216
net.ipv4.tcp_rmem = 4096 12582912 16777216
net.ipv4.tcp_max_syn_backlog = 8096
net.ipv4.tcp_slow_start_after_idle = 0
net.ipv4.tcp_tw_reuse = 1
net.ipv4.ip_local_port_range = 10240 65535

Для того чтобы настройки вступили в силу, стоит выполнить:

$ sysctl -p

Или:

# reboot 

Если в вашей среде нет проблем с TCP_WAIT, эти изменения не нужны.

Перейдем к установке…

Установка Fluentd в CentOS/Fedora/RedHat

Имеется несколько способов установить fluentD на ваш сервер, я приведу несколько из них.

-=== СПОСОБ 1 ===-

Установка очень простая, выполняем:

$ curl -L https://toolbelt.treasuredata.com/sh/install-redhat-td-agent3.sh | sh

Для установки td-agent2, выполните:

$ curl -L https://toolbelt.treasuredata.com/sh/install-redhat-td-agent2.sh | sh

Для запуска, случит команда:

$ service td-agent start

Или:

$ /etc/init.d/td-agent start

Ну, и конечно же, если юзаете systemD:

# systemctl start td-agent.service

Вот и вся установка.

-=== СПОСОБ 2 — использовать docker ===-

Использовать докер. Я расскажу как это сделать немного ниже

-=== СПОСОБ 3 — использовать gem===-

Использовать gem. Я расскажу как это сделать немного ниже

Установка Fluentd в Debian/Ubuntu

Имеется несколько способов установить fluentD на ваш сервер, я приведу несколько из них.

-=== СПОСОБ 1 ===-

Установка очень простая, выполняем одно из действий:

Если у вас Ubuntu Bionic:

$ curl -L https://toolbelt.treasuredata.com/sh/install-ubuntu-bionic-td-agent3.sh | sh

Если у вас Ubuntu Xenial:

$ curl -L https://toolbelt.treasuredata.com/sh/install-ubuntu-xenial-td-agent3.sh | sh

Если у вас Ubuntu Trusty:

$ curl -L https://toolbelt.treasuredata.com/sh/install-ubuntu-trusty-td-agent3.sh | sh

Если у вас Debian Stretch:

$ curl -L https://toolbelt.treasuredata.com/sh/install-debian-stretch-td-agent3.sh | sh

Если у вас Debian Jessie:

$ curl -L https://toolbelt.treasuredata.com/sh/install-debian-jessie-td-agent3.sh | sh

PS: Как и в примере с RPM, можно использовать еще и td-agent2.

Запускаем и смотрим что вышло ( если у вас systemD):

# systemctl start td-agent.service && systemctl status td-agent.service

Запускаем и смотрим что вышло ( если у вас init.d):

# /etc/init.d/td-agent restart && /etc/init.d/td-agent status

Как-то так.

-=== СПОСОБ 2 — использовать docker ===-

Использовать докер. Я расскажу как это сделать немного ниже

-=== СПОСОБ 3 — использовать gem===-

Использовать gem. Я расскажу как это сделать немного ниже

Установка Fluentd в Mac OS X

Имеется несколько способов установить fluentD на ваш сервер, я приведу несколько из них.

-=== СПОСОБ 1 ===-

Идем по ссылке ( на момент написания статьи, была самая свежая версия) и скачиваем:

$ wget http://packages.treasuredata.com.s3.amazonaws.com/3/macosx/td-agent-3.1.1-0.dmg

Чтобы установить имееться команды, если не знаете как, — вот чтиво:

Установка dmg пакетов через CLI (командную строку) в MacOS X

Затем, запустим:

$ sudo launchctl load /Library/LaunchDaemons/td-agent.plist

Посмотреть логи можно так:

$ less /var/log/td-agent/td-agent.log

Чтобы оставновить службу, выполните:

$ sudo launchctl unload /Library/LaunchDaemons/td-agent.plist

Вот и все!

-=== СПОСОБ 2 — использовать docker ===-

Использовать докер. Я расскажу как это сделать немного ниже

-=== СПОСОБ 3 — использовать gem===-

Использовать gem. Я расскажу как это сделать немного ниже

Установка Fluentd на другие Unix/Linux ОС

Имеется несколько способов установить fluentD на ваш сервер, я приведу несколько из них.

-=== СПОСОБ 1 — использовать docker ===-

Устанавливаем Docker:

Установка Docker на Debian/Ubuntu

Установка Docker на CentOS/RedHat/Fedora

Выполним поиск пакета:

$ docker search fluentd

Чтобы поставить, выполняем:

$ docker pull fluent/fluentd

Создаем конфиг, например:

$ vim /tmp/fluentd.conf

И в него, прописываем:

<source>
  @type http
  port 9880
  bind 0.0.0.0
</source>
<match **>
  @type stdout
</match>

Запускаем контейнер:

$ docker run -d \
  -p 9880:9880 -v /tmp:/fluentd/etc -e FLUENTD_CONF=fluentd.conf \
  fluent/fluentd

Для теста можно выполнить:

$ curl -X POST -d 'json={"json":"message"}' http://localhost:9880/sample.test

-=== СПОСОБ 2 — использовать исходный код===-

Ставим git и клонируем код:

$ git clone https://github.com/fluent/fluentd.git && cd fluentd

Выполним билд:

$ bundle install
Fetching gem metadata from https://rubygems.org/.........
...
Your bundle is complete!
Use `bundle show [gemname]` to see where a bundled gem is installed.
$ bundle exec rake build
fluentd xxx built to pkg/fluentd-xxx.gem.
$ gem install pkg/fluentd-xxx.gem

Запускаем:

$ fluentd --setup ./fluent
$ fluentd -c ./fluent/fluent.conf -vv &
$ echo '{"json":"message"}' | fluent-cat debug.test

Для остановки, можно заюзать:

$ pkill -f fluentd

Идем дальше…

-=== СПОСОБ 3 — использовать gem===-

Первым делом, нужен Ruby >= 2.1.

После чего, выполняем:

$ gem install fluentd --no-ri --no-rdoc

Потом выполняем:

$ fluentd --setup ./fluent
$ fluentd -c ./fluent/fluent.conf -vv &
$ echo '{"json":"message"}' | fluent-cat debug.test

Чтобы остановить сервис, выполните:

$ pkill -f fluentd

Как-то так.

Настройка Fluentd в Unix/Linux

После установки, можно установить плагины. Приведу несколько примеров:

Использование плагинов для FluentD

Я при использовании докера, использвовал:

$ /opt/td-agent/embedded/bin/fluent-gem install --no-ri --no-rdoc \
    fluent-plugin-elasticsearch \
    fluent-plugin-record-modifier \
    fluent-plugin-exclude-filter \
    fluent-plugin-splunk-enterprise

Можно на машине использовать:

$ fluent-gem install --no-ri --no-rdoc \
    fluent-plugin-elasticsearch \
    fluent-plugin-record-modifier \
    fluent-plugin-exclude-filter \
    fluent-plugin-splunk-enterprise

Или если используете td-agent:

# td-agent-gem install fluent-plugin-elasticsearch \
    fluent-plugin-record-modifier \
    fluent-plugin-exclude-filter \
    fluent-plugin-splunk-enterprise

Как-то так.

Конфигурация FluentD

Мой fluentd.config выглядит следующим образом:

# http
<source>
 @type http
 @id http_input
 format json
 port 8888
 self_hostname "#{ENV['HOSTNAME']}"
 <parse>
   @type json
 </parse>
 tag http.events
</source>

# tcp
<source>
  @type tcp
  @id tcp_input
  format none
  format /^(?<field1>\d+):(?<field2>\w+)$/
  port 5170
  bind 0.0.0.0
  delimiter \n
  #log-level debug
  self_hostname "#{ENV['HOSTNAME']}"
  #source_hostname_key "client_host"
  <parse>
   @type json
  </parse>
  tag tcp.events
</source>

# Forwarding 
<source>
  @type forward
  @id forward_input
  port 24224
  self_hostname "#{ENV['HOSTNAME']}"
  bind 0.0.0.0
  tag forward.events
</source>

# live debugging agent
<source>
  @type debug_agent
  @id debug.agent
  bind 127.0.0.1
  port 24230
  tag debug_agent.debug
</source>

###############################################################################
## match directives determine the output destinations.
## filter directives determine the event processing pipelines.
## system directives set system wide configuration.
## label directives group the output and filter for internal routing
## @include directives include other files.
## Output descriptions:
###############################################################################

# <match **.access>
<match **>
  @type copy
  <store>
    @type stdout
  </store>  
</match>

## match tag=debug.** and dump to console
<match **.debug>
  @type stdout
  @id output_stdout
</match>

<filter esb_bw>
  @type record_transformer
  <record>
    hostname "#{Socket.gethostname}"
  </record>
</filter>

<system>
  # equal to -qq option
  log_level error

  process_name fluentd
</system>

# Include config files in the ./config.d directory
@include config.d/*.conf

Чтобы работать с файлами, можно использовать:

<source>
  @type tail
  @id in_tail_container_logs
  path /logs/docker_logs/*/*.log
  pos_file /data/docker.pos
  read_from_head true
  tag docker.**
  skip_refresh_on_startup false
  refresh_interval 10s
  enable_watch_timer true
  enable_stat_watcher false
  <parse>
    @type json
    time_format %Y-%m-%dT%H:%M:%S.%NZ
  </parse>
</source>

Отфильтруем, ( В данном случае дописывает имя хостовой системы, на которой запущен контейнер):

<filter docker.**>
  @type record_transformer
  enable_ruby
  <record>
    hostname "#{Socket.gethostname}"
  </record>
</filter>

Выполняет разбивку на порции данных (chunks) и пишет их в буфер (buffer), который находится на диске. Порции данных помещает в очередь. Отправляет коллектору:

<match docker.**>
  @type forward
  @id forward_docker
  <server>
    name main_server
    host collector.example.com
    port 24224
  </server>
  <buffer>
    @type file
    path /data/buffers/containers
    flush_mode interval
    retry_type exponential_backoff
    flush_thread_count 2
    flush_interval 2s
    retry_forever
    retry_max_interval 30
    chunk_limit_size 4M
    queue_limit_length 512
    overflow_action block
  </buffer>
</match>

Так же способом можно делать для других типов.

Вот и все, статья «Установка Fluentd в Unix/Linux» завершена.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.