Статьи

Сбор всех журналов докера с помощью Fluentd

На тот случай, если вы были в автономном режиме в течение последних двух лет,  Docker  — это открытая платформа для распределенных приложений для разработчиков и системных администраторов. Превратив ваше программное обеспечение в контейнеры, Docker позволяет межфункциональным группам беспрепятственно отправлять и запускать приложения на разных платформах.

В архитектуре, ориентированной на контейнеры, приложения приходят и уходят постоянно, а это означает, что отслеживание журналов приложений представляет собой операционные проблемы. Где можно безопасно архивировать журналы? Хост-машина не запускается, поскольку тысячи контейнеров могут работать на одном хосте. HDFS или S3 могут быть хорошим постоянным домом для контейнерных бревен, но как контейнеры отправляют им бревна?

В версии 1.6 Docker добавил драйвер ведения  журнала  для решения этой проблемы. Указав опцию «–log-driver», пользователь Docker может указать, куда отправлять журналы для каждого контейнера.

Свободно используется в качестве драйвера докера

Как первоначальный создатель  Fluentd , сборщика данных с открытым исходным кодом для создания единого уровня ведения журнала, мы приветствовали эту разработку. Мы были так взволнованы, что один из наших инженеров и коммиттер Fluentd, Satoshi Tagomori, отправил  запрос  на добавление Fluentd в качестве драйвера ведения журнала.

И сегодня мы рады объявить, что запрос на получение сатоши был объединен. В основной ветке Fluentd уже поддерживается как драйвер регистрации и планируется к выпуску в версии 1.8!

Итак, как это будет работать? Для действительно нетерпеливых, я проведу краткий тур. Остальная часть этой записи блога была протестирована на Ubuntu 14.04 LTS.

Шаг 1: Получение Docker

Запустите следующую команду:

sudo  wget -qO- https://get.docker.com/ | sh

По состоянию на 1 июля 2015 года устанавливается Docker 1.7. Запустите «docker –version», чтобы подтвердить версию Docker. Если это действительно 1,7 или старше, пожалуйста, выполните шаг 1b. В противном случае перейдите к шагу 2.

Шаг 1b: Получение Docker из мастер-ветки (пока не выйдет версия 1.8!)

Стоп Докер:

sudo service docker stop

Переименуйте текущий двоичный файл Docker.

sudo mv /usr/bin/docker /usr/bin/docker-orig

Get Docker 1.8

sudo wget -O /usr/bin/dockerhttps://master.dockerproject.org/linux/amd64/docker-1.8.0-dev

Измените разрешение на бинарный Docker 1.8.

sudo chmod 755 /usr/bin/docker

Наконец, перезапустите Docker

sudo service docker start

Шаг 2: Получение Fluentd через td-agent

Самый простой способ загрузить Fluentd — через  td-agent , пакет Fluentd, поддерживаемый Treasure Data. Запустите следующую команду.

curl -L https://td-toolbelt.herokuapp.com/sh/install-ubuntu-trusty-td-agent2.sh | sh

Шаг 3: Настройка td-agent

Одной из ключевых особенностей Fluentd является его способность направлять события на основе их тегов. По умолчанию сообщения Docker отправляются с тегом «docker. <CONTAINER_ID>». Это можно настроить с помощью опции Docker –log-opt  . Например, если вы хотите использовать описательные имена контейнеров, вы можете сделать это с помощью «–log-opt fluentd-tag = docker. {{.Name}} ».

Чтобы протестировать эту функцию, давайте настроим td-agent на вывод всех событий с тегом с префиксом «docker» в stdout. Отредактируйте /etc/td-agent/td-agent.conf и добавьте следующие строки:

<match docker.**>
type stdout
</match>

Затем перезапустите td-agent следующим образом:

sudo service td-agent restart

Шаг 4: Запустите контейнер и подтвердите

Наконец, давайте запустим контейнер и отправим логи td-агенту хоста.

docker run –log-driver=fluentd hello-world

Затем давайте посмотрим на журнал stdout td-agent, который можно найти в /var/log/td-agent/td-agent.log

tail -n 3 /var/log/td-agent/td-agent.log

2015-07-01 16:56:02 -0400 docker.c61d13c68659: {“container_id”:”c61d13c68659b622a01d8c3825b0bc1186391119d47dbf864d9c3a65c3f2aa79″,”container_name”:”/distracted_bell”,”source”:”stdout”,”log”:””}

2015-07-01 16:56:02 -0400 docker.c61d13c68659: {“source”:”stdout”,”log”:”For more examples and ideas, visit:”,”container_id”:”c61d13c68659b622a01d8c3825b0bc1186391119d47dbf864d9c3a65c3f2aa79″,”container_name”:”/distracted_bell”}

2015-07-01 16:56:02 -0400 docker.c61d13c68659: {“container_name”:”/distracted_bell”,”source”:”stdout”,”log”:” http://docs.docker.com/userguide/”,”container_id”:”c61d13c68659b622a01d8c3825b0bc1186391119d47dbf864d9c3a65c3f2aa79″}

Что дальше?

Напомним, что Fluentd / td-agent способны отправлять журналы в  сотни бэкэнд-систем,  таких как Elasticsearch, MongoDB, HDFS и, да, Treasure Data. Итак, установите Fluentd на ваш хост Docker и начните отправлять ваши журналы на сервер по вашему выбору!