На тот случай, если вы были в автономном режиме в течение последних двух лет, 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 и начните отправлять ваши журналы на сервер по вашему выбору!