Yandex Cloud
Поиск
Связаться с намиПодключиться
  • Документация
  • Блог
  • Все сервисы
  • Статус работы сервисов
    • Доступны в регионе
    • Инфраструктура и сеть
    • Платформа данных
    • Контейнеры
    • Инструменты разработчика
    • Бессерверные вычисления
    • Безопасность
    • Мониторинг и управление ресурсами
    • AI Studio
    • Бизнес-инструменты
  • Все решения
    • По отраслям
    • По типу задач
    • Экономика платформы
    • Безопасность
    • Техническая поддержка
    • Каталог партнёров
    • Обучение и сертификация
    • Облако для стартапов
    • Облако для крупного бизнеса
    • Центр технологий для общества
    • Партнёрская программа
    • Поддержка IT-бизнеса
    • Облако для фрилансеров
    • Обучение и сертификация
    • Блог
    • Документация
    • Мероприятия и вебинары
    • Контакты, чаты и сообщества
    • Идеи
    • Истории успеха
    • Тарифы Yandex Cloud
    • Промоакции и free tier
    • Правила тарификации
  • Документация
  • Блог
Проект Яндекса
© 2025 ТОО «Облачные Сервисы Казахстан»
Практические руководства
    • Все руководства
    • Разграничение прав доступа для групп пользователей
    • Создание L7-балансировщика с профилем безопасности Smart Web Security через Ingress-контроллер Application Load Balancer
    • Централизованная публикация в интернете и защита приложений от DDoS
    • Передача логов с виртуальной машины в Cloud Logging
    • Запись логов балансировщика в PostgreSQL
    • Безопасное хранение паролей для GitLab CI в виде секретов Yandex Lockbox
    • Сервисный аккаунт с профилем OS Login для управления ВМ с помощью Ansible
    • Передача логов с Container Optimized Image в Cloud Logging
    • Добавление HTML-страницы для работы SmartCaptcha
    • Создание L7-балансировщика с профилем безопасности
    • Настройка алертов в Monitoring
    • Загрузка аудитных логов в MaxPatrol SIEM
    • Загрузка аудитных логов в SIEM Splunk
    • Загрузка аудитных логов в SIEM ArcSight
    • Шифрование для бакета Object Storage на стороне сервера
    • Шифрование секретов в HashiCorp Terraform
    • Управление ключами KMS с HashiCorp Terraform
    • Auto Unseal в HashiCorp Vault
    • Передача логов кластера Managed Service for Greenplum® в Yandex Cloud Logging

В этой статье:

  • Перед началом работы
  • Создайте сервис systemd, генерирующий логи
  • Установите и настройте Fluent Bit
  • Подключите плагин
  • Посмотрите логи
  • Устранение возможных неполадок
  • Полезные команды для диагностики
  • Удалите созданные ресурсы
  1. Безопасность
  2. Передача логов с виртуальной машины в Cloud Logging

Передача логов с ВМ в Yandex Cloud Logging

Статья создана
Yandex Cloud
Улучшена
Обновлена 6 июня 2025 г.
  • Перед началом работы
  • Создайте сервис systemd, генерирующий логи
  • Установите и настройте Fluent Bit
  • Подключите плагин
  • Посмотрите логи
  • Устранение возможных неполадок
  • Полезные команды для диагностики
  • Удалите созданные ресурсы

Обработчик логов Fluent Bit позволяет транслировать логи с виртуальных машин в сервис Yandex Cloud Logging. Для передачи логов используется модуль Fluent Bit plugin for Yandex Cloud Logging.

Чтобы настроить передачу логов:

  1. Создайте сервис systemd, генерирующий логи.
  2. Установите и настройте Fluent Bit.
  3. Подключите плагин.

Перед началом работыПеред началом работы

  1. Создайте сервисный аккаунт с ролью logging.writer на каталог.

  2. Создайте ВМ из публичного образа Ubuntu 24.04. В блоке Доступ укажите сервисный аккаунт, который создали на предыдущем шаге.

  3. Подключитесь к ВМ по SSH.

  4. Установите на ВМ пакеты для разработки:

    sudo apt-get update
    sudo apt-get install -y python3-pip python3-venv python3-systemd git build-essential pkg-config libsystemd-dev golang-go
    

    Команда устанавливает:

    • python3-pip — менеджер пакетов Python (pip) для создания сервиса systemd, генерирующего логи.
    • python3-venv — модуль для создания виртуальных окружений Python.
    • python3-systemd — Python-библиотека для взаимодействия с systemd.
    • git — система контроля версий для загрузки с GitHub исходных кодов плагина Fluent Bit for Yandex Cloud Logging.
    • build-essential — компиляторы и инструменты для сборки ПО.
    • pkg-config — утилита для получения флагов компиляции и линковки библиотек.
    • libsystemd-dev — заголовочные файлы и библиотеки для разработки под systemd.
    • golang-go — компилятор и инструменты языка Go (Golang) для сборки плагина Fluent Bit.
  5. Проверьте версии установленных пакетов:

    python3 --version
    pip3 --version
    go version
    

    Результат должен быть не ниже:

    Python 3.10
    pip 22.0.2 from /usr/lib/python3/dist-packages/pip (python 3.10)
    go version go1.17.6 linux/amd64
    

Создайте сервис systemd, генерирующий логиСоздайте сервис systemd, генерирующий логи

  1. Создайте директорию:

    sudo mkdir -p /usr/local/bin/logtest
    sudo chown $USER /usr/local/bin/logtest
    cd /usr/local/bin/logtest
    
  2. Создайте файл logtest.py:

    import logging
    import random
    import sys
    import time
    from systemd import journal
    
    # Настройка логгера
    logger = logging.getLogger("logtest")
    journald_handler = journal.JournalHandler(SYSLOG_IDENTIFIER="logtest")
    logger.addHandler(journald_handler)
    logger.setLevel(logging.DEBUG)
    
    # Генерируем URL-подобные значения
    PATHS = [
        "/",
        "/admin",
        "/hello",
        "/docs",
    ]
    
    PARAMS = [
        "foo",
        "bar",
        "query",
        "search",
        None
    ]
    
    def fake_url():
        path = random.choice(PATHS)
        param = random.choice(PARAMS)
        if param:
            val = random.randint(0, 100)
            param += "={}".format(val)
        code = random.choices([200, 400, 404, 500], weights=[10, 2, 2, 1])[0]
        return "?".join(filter(None, [path, param])), code
    
    if __name__ == "__main__":
        while True:
            path, code = fake_url()
            if code == 200:
                logger.info(
                    "Path: {}".format(path),
                    extra={
                        "code": code
                    }
                )
            else:
                logger.error(
                    "Error: {}".format(path),
                    extra={
                        "code": code
                    }
                )
            time.sleep(1)
    
  3. Создайте виртуальную среду и установите необходимые зависимости:

    python3 -m venv ~/venv
    source ~/venv/bin/activate
    pip install systemd-python
    
  4. Сделайте файл исполняемым:

    sudo chmod +x /usr/local/bin/logtest/logtest.py
    
  5. Создайте файл /etc/systemd/system/logtest.service:

    [Unit]
    Description=Log Test Service
    After=network.target
    
    [Service]
    ExecStart=/home/$USER/venv/bin/python3 /usr/local/bin/logtest/logtest.py
    Environment=PYTHONPATH=/home/$USER/venv/lib/python3.12/site-packages
    Restart=always
    User=$USER
    StandardOutput=journal
    StandardError=journal
    
    [Install]
    WantedBy=multi-user.target
    
  6. Перезапустите systemd:

    sudo systemctl daemon-reload
    
  7. Запустите и проверьте статус сервиса:

    sudo systemctl start logtest
    sudo systemctl status logtest
    

    Результат:

    ● logtest.service - Sample to show logging from a Python application to systemd
         Loaded: loaded (/etc/systemd/system/logtest.service; linked; vendor preset: enabled)
         Active: active (running) since Thu 2024-05-30 12:34:56 UTC; 5s ago
       Main PID: 12345 (logtest.sh)
          Tasks: 2 (limit: 2311)
         Memory: 18.5M
            CPU: 156ms
         CGroup: /system.slice/logtest.service
                 ├─12345 /bin/bash /usr/local/bin/logtest/logtest.sh
                 └─12346 python /usr/local/bin/logtest/logtest.py
    

Установите и настройте Fluent BitУстановите и настройте Fluent Bit

  1. Добавьте GPG-ключ и репозиторий Fluent Bit:

    wget -qO - https://packages.fluentbit.io/fluentbit.key | sudo apt-key add -
    echo "deb https://packages.fluentbit.io/ubuntu/focal focal main" | sudo tee /etc/apt/sources.list.d/fluent-bit.list
    
  2. Установите Fluent Bit:

    sudo apt-get update
    sudo apt-get install -y fluent-bit
    

Подключите плагинПодключите плагин

  1. Клонируйте репозиторий с плагином:

    git clone https://github.com/yandex-cloud/fluent-bit-plugin-yandex.git
    cd fluent-bit-plugin-yandex
    
  2. Создайте и настройте файл с версиями:

    cat > versions.sh << 'EOL'
    #!/bin/bash
    export fluent_bit_version=3.0.3
    export golang_version=1.22.2
    export plugin_version=dev
    EOL
    
    chmod +x versions.sh
    source ./versions.sh
    
  3. Соберите плагин:

    CGO_ENABLED=1 go build -v -buildmode=c-shared -o yc-logging.so yclogging.go
    
  4. Установите плагин:

    sudo mkdir -p /usr/local/lib/fluent-bit/
    sudo cp yc-logging.so /usr/local/lib/fluent-bit/
    sudo chmod 644 /usr/local/lib/fluent-bit/yc-logging.so
    
  5. Создайте файл /etc/fluent-bit/plugins.conf:

    [PLUGINS]
        Path /usr/local/lib/fluent-bit/yc-logging.so
    
  6. Создайте файл /etc/fluent-bit/fluent-bit.conf:

    [SERVICE]
        Flush        1
        Daemon       Off
        Log_Level    info
        Parsers_File parsers.conf
        Plugins_File plugins.conf
    
    [INPUT]
        Name            systemd
        Tag             host.*
        Systemd_Filter  _SYSTEMD_UNIT=logtest.service
    
    [OUTPUT]
        Name            yc-logging
        Match           *
        resource_type   logtest
        folder_id       <идентификатор_каталога>
        message_key     MESSAGE
        level_key       SEVERITY
        default_level   WARN
        authorization   instance-service-account
    

    Где:

    • folder_id — идентификатор каталога Yandex Cloud, в лог-группу по умолчанию которого будут передаваться логи.
    • authorization — настройки авторизации. Значение instance-service-account используется для авторизации от имени сервисного аккаунта, указанного при создании ВМ.
    • level_key — поле, содержащее уровень логирования.
    • message_key — поле, содержащее текст сообщения.
    • default_level — уровень логирования по умолчанию, если не указан в сообщении.
  7. Перезапустите Fluent Bit:

    sudo systemctl restart fluent-bit
    

Посмотрите логиПосмотрите логи

Консоль управления
CLI
API
  1. Проверьте статус сервисов:
sudo systemctl status logtest
sudo systemctl status fluent-bit

Результат:

● fluent-bit.service - Fluent Bit
     Loaded: loaded (/lib/systemd/system/fluent-bit.service; disabled; vendor preset: enabled)
     Active: active (running) since Thu 2024-05-30 12:34:56 UTC; 5s ago
       Docs: https://docs.fluentbit.io/manual/
   Main PID: 12347 (fluent-bit)
      Tasks: 4 (limit: 2311)
     Memory: 18.8M
        CPU: 156ms
     CGroup: /system.slice/fluent-bit.service
             └─12347 /opt/fluent-bit/bin/fluent-bit -c /etc/fluent-bit/fluent-bit.conf
  1. Просмотрите логи:

    # Логи тестового сервиса
    sudo journalctl -u logtest -n 10 | cat
    
    # Логи Fluent Bit
    sudo journalctl -u fluent-bit -n 20 | cat
    

    При корректной работе:

    1. Оба сервиса должны иметь статус "active (running)".
    2. В логах тестового сервиса должны появляться сообщения вида:
      • Path: /admin?query=90 для успешных запросов.
      • Error: /docs?bar=44 для ошибочных запросов.
    3. В логах Fluent Bit не должно быть ошибок.
  2. Проверьте логи в консоли управления:

    1. Откройте консоль управления.
    2. Перейдите в каталог, указанный в folder_id.
    3. Выберите сервис Cloud Logging.
    4. Откройте лог-группу по умолчанию default.
    5. На вкладке Логи настройте фильтры:
      • resource_type=logtest для просмотра логов тестового сервиса.
      • timestamp > now()-1h для просмотра логов за последний час.

Если у вас еще нет интерфейса командной строки Yandex Cloud (CLI), установите и инициализируйте его.

По умолчанию используется каталог, указанный при создании профиля CLI. Чтобы изменить каталог по умолчанию, используйте команду yc config set folder-id <идентификатор_каталога>. Также для любой команды вы можете указать другой каталог с помощью параметров --folder-name или --folder-id.

Чтобы посмотреть записи в лог-группе, выполните команду:

yc logging read --folder-id=<идентификатор_каталога>

Где --folder-id — идентификатор каталога, который указан в настройках сервиса fluent-bit.

Чтобы посмотреть записи в лог-группе, воспользуйтесь вызовом gRPC API LogReadingService/Read.

Устранение возможных неполадокУстранение возможных неполадок

  1. Ошибки доступа к файлам и системные проблемы:

    • Проверьте права доступа к критическим файлам:

      ls -l /usr/local/lib/fluent-bit/yc-logging.so
      ls -l /etc/fluent-bit/plugins.conf
      ls -l /etc/fluent-bit/fluent-bit.conf
      

      Корректный результат должен выглядеть так:

      -rwxr-xr-x 1 root root 8123456 May 30 12:34 /usr/local/lib/fluent-bit/yc-logging.so
      -rw-r--r-- 1 root root 123 May 30 12:34 /etc/fluent-bit/plugins.conf
      -rw-r--r-- 1 root root 456 May 30 12:34 /etc/fluent-bit/fluent-bit.conf
      
    • Проверьте системные логи на наличие ошибок:

      sudo tail -f /var/log/syslog
      

      Пример корректных логов:

      May 30 12:34:56 vm-name fluent-bit[12347]: [2024/05/30 12:34:56] [ info] [fluent bit] version=3.0.3
      May 30 12:34:56 vm-name fluent-bit[12347]: [2024/05/30 12:34:56] [ info] [storage] ver=1.4.0, type=memory
      May 30 12:34:56 vm-name fluent-bit[12347]: [2024/05/30 12:34:56] [ info] [cmetrics] version=0.6.3
      
      journalctl -xe
      

      Пример корректных логов:

      May 30 12:34:56 vm-name systemd[1]: Started Fluent Bit.
      May 30 12:34:56 vm-name fluent-bit[12347]: Fluent Bit v3.0.3
      May 30 12:34:56 vm-name logtest.sh[12345]: [INFO] 200 Path: /hello?query=42
      
  2. Ошибка "Permission denied":

    • Проверьте права сервисного аккаунта:

      yc iam service-account list
      

      Результат должен показать ваш сервисный аккаунт:

      +----------------------+---------------+
      |          ID          |     NAME      |
      +----------------------+---------------+
      | aje5n27q235g8m3...   | service-acc-1 |
      +----------------------+---------------+
      
    • Проверьте роли сервисного аккаунта:

      yc iam service-account get service-acc-1
      

      В результате должна быть роль logging.writer:

      id: aje5n27q235g8m3...
      folder_id: b1g4c2a3v000000000000
      name: service-acc-1
      roles:
        - logging.writer
      
  3. Логи не появляются в Cloud Logging:

    • Проверьте правильность folder_id в конфигурации:

      grep folder_id /etc/fluent-bit/fluent-bit.conf
      

      Результат должен показать ваш folder_id:

      folder_id b1g4c2a3v000000000000
      
    • Проверьте, что плагин yc-logging правильно загружен:

      sudo systemctl status fluent-bit | grep yc-logging
      

      Корректный результат:

      May 30 12:34:56 vm-name fluent-bit[12347]: [2024/05/30 12:34:56] [ info] [output:yc-logging:yc-logging.0] worker #0 started
      
  4. Проблемы с форматом логов:

    • Проверьте настройки в конфигурации:

      grep -A 5 '\[OUTPUT\]' /etc/fluent-bit/fluent-bit.conf
      

      Корректный результат:

      [OUTPUT]
          Name            yc-logging
          Match           *
          resource_type   logtest
          message_key     MESSAGE
          level_key       SEVERITY
      
    • Проверьте формат логов в journald:

      journalctl -u logtest -n 5
      

      Корректный формат логов:

      May 30 12:34:56 vm-name logtest.sh[12345]: [INFO] 200 Path: /hello?query=42
      May 30 12:34:57 vm-name logtest.sh[12345]: [ERROR] 404 Error: /admin?foo=13
      
  5. Ошибки доступа к файлам и системные проблемы:

    • Проверьте права доступа к критическим файлам:

      ls -l /usr/local/lib/fluent-bit/yc-logging.so
      ls -l /etc/fluent-bit/plugins.conf
      ls -l /etc/fluent-bit/fluent-bit.conf
      
    • Проверьте системные логи на наличие ошибок:

      sudo tail -f /var/log/syslog
      journalctl -xe
      
    • Убедитесь, что все файлы имеют корректные права доступа (644 для конфигурационных файлов, 755 для библиотек).

  6. Ошибка "Permission denied":

    • Проверьте права сервисного аккаунта.
    • Убедитесь, что роль logging.writer назначена на нужный каталог.
    • Проверьте, что токен сервисного аккаунта действителен.
  7. Логи не появляются в Cloud Logging:

    • Проверьте правильность folder_id в конфигурации.

    • Убедитесь, что формат логов соответствует ожидаемому.

    • Проверьте, что плагин yc-logging правильно загружен:

      sudo systemctl status fluent-bit | grep yc-logging
      
  8. Проблемы с форматом логов:

    • Проверьте настройки message_key и level_key.
    • Убедитесь, что логи содержат необходимые поля.
    • Проверьте формат времени в логах.

Полезные команды для диагностикиПолезные команды для диагностики

  1. Просмотр расширенных логов Fluent Bit:

    • Отслеживание логов в реальном времени:

      sudo journalctl -u fluent-bit -n 100 -f
      

      Пример вывода:

      May 30 12:34:56 vm-name fluent-bit[1234]: [info] [engine] started (pid=1234)
      May 30 12:34:56 vm-name fluent-bit[1234]: [info] [storage] version=1.1.6, initializing...
      May 30 12:34:57 vm-name fluent-bit[1234]: [info] [yc-logging] plugin initialized successfully
      
  2. Проверка использования CPU и памяти:

    • Отслеживание процесса Fluent Bit:

      ps aux | grep fluent-bit
      top -p $(pgrep fluent-bit)
      

      Пример вывода ps:

      fluent  1234  0.5  1.2 256892 12644 ?  Ssl  12:34  0:02 /opt/fluent-bit/bin/fluent-bit -c /etc/fluent-bit/fluent-bit.conf
      
  3. Мониторинг сетевых соединений:

    • Проверка открытых портов и соединений:

      sudo netstat -tupn | grep fluent-bit
      

      Пример вывода:

      tcp  0  0  0.0.0.0:24224  0.0.0.0:*  LISTEN  1234/fluent-bit
      tcp  0  0  10.0.0.2:52431  logging.api.cloud.yandex.net:443  ESTABLISHED  1234/fluent-bit
      
  4. Проверка загрузки плагина:

    • Просмотр открытых файлов процесса:

      sudo lsof -p $(pgrep fluent-bit) | grep yc-logging
      

      Пример вывода:

      fluent-bit 1234 fluent-bit  mem REG 8,1 2890144 /usr/local/lib/fluent-bit/yc-logging.so
      
  5. Проверка конфигурационных файлов:

    • Получение контрольных сумм:

      find /etc/fluent-bit/ -type f -exec md5sum {} \;
      

      Пример вывода:

      a1b2c3d4e5f6g7h8 /etc/fluent-bit/fluent-bit.conf
      b2c3d4e5f6g7h8i9 /etc/fluent-bit/plugins.conf
      c3d4e5f6g7h8i9j0 /etc/fluent-bit/parsers.conf
      

Удалите созданные ресурсыУдалите созданные ресурсы

Если созданные ресурсы вам больше не нужны, удалите их:

  1. Удалите виртуальную машину.
  2. Удалите лог-группу.

Была ли статья полезна?

Предыдущая
Terraform
Следующая
Запись логов балансировщика в PostgreSQL
Проект Яндекса
© 2025 ТОО «Облачные Сервисы Казахстан»