> ## Documentation Index
> Fetch the complete documentation index at: https://clickhouse.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Мониторинг журналов хоста с ClickStack

> Мониторинг типовых журналов хоста с ClickStack

export const TrackedLink = ({href, eventName, children, ...rest}) => {
  const handleClick = () => {
    try {
      if (typeof window !== "undefined" && window.galaxy && eventName) {
        window.galaxy.track(eventName, {
          interaction: "click"
        });
      }
    } catch (e) {}
  };
  return <a href={href} onClick={handleClick} {...rest}>
      {children}
    </a>;
};

export const Image = ({img, alt, size = "lg"}) => {
  const normalizedSize = ["sm", "md", "lg"].includes(size) ? size : "lg";
  return <div className={`ch-image-${normalizedSize}`}>
      <Frame>
        <img src={img} alt={alt} />
      </Frame>
    </div>;
};

<Info>
  **Кратко**

  Собирайте и визуализируйте системные журналы хостов (syslog, auth, kernel) в ClickStack с помощью OTel-ресивера `filelog`. Включает демо-набор данных и преднастроенный дашборд.
</Info>

<div id="existing-hosts">
  ## Интеграция с существующими хостами
</div>

В этом разделе описано, как настроить существующие хосты на отправку системных журналов в ClickStack, изменив конфигурацию OTel collector ClickStack так, чтобы он считывал все системные файлы журналов (syslog, auth, kernel, daemon и журналы приложений).

Если вы хотите протестировать интеграцию журналов хоста перед настройкой собственной среды, воспользуйтесь нашей предварительно настроенной конфигурацией и тестовыми данными в разделе ["демо-набор данных"](/docs/ru/clickstack/integration-examples/host-logs#demo-dataset).

<div id="prerequisites">
  ##### Необходимые условия
</div>

* Запущенный экземпляр ClickStack
* Система с файлами syslog
* Доступ на изменение файлов конфигурации ClickStack

<Steps>
  <Step title="Проверьте наличие файлов syslog" id="verify-syslog">
    Сначала убедитесь, что система записывает файлы syslog:

    ```bash theme={null}
    # Check if syslog files exist (Linux)
    ls -la /var/log/syslog /var/log/messages

    # Or on macOS
    ls -la /var/log/system.log

    # View recent entries
    tail -20 /var/log/syslog
    ```

    Распространённые пути к syslog:

    * **Ubuntu/Debian**: `/var/log/syslog`
    * **RHEL/CentOS/Fedora**: `/var/log/messages`
    * **macOS**: `/var/log/system.log`
  </Step>

  <Step title="Создание пользовательской конфигурации OTel collector" id="custom-otel">
    ClickStack позволяет расширить базовую конфигурацию OpenTelemetry Collector, подключив пользовательский файл конфигурации и установив переменную среды.

    Создайте файл `host-logs-monitoring.yaml` с конфигурацией для вашей системы:

    <Tabs>
      <Tab title="Современный Linux (Ubuntu 24.04+)">
        ```yaml theme={null}
        receivers:
          filelog/syslog:
            include:
              - /var/log/syslog
              - /var/log/**/*.log
            start_at: end
            operators:
              - type: regex_parser
                regex: '^(?P<timestamp>\S+) (?P<hostname>\S+) (?P<unit>\S+?)(?:\[(?P<pid>\d+)\])?: (?P<message>.*)$'
                parse_from: body
                parse_to: attributes
              
              - type: time_parser
                parse_from: attributes.timestamp
                layout_type: gotime
                layout: '2006-01-02T15:04:05.999999-07:00'
              
              - type: add
                field: attributes.source
                value: "host-logs"
              
              - type: add
                field: resource["service.name"]
                value: "host-production"

        service:
          pipelines:
            logs/host:
              receivers: [filelog/syslog]
              processors:
                - memory_limiter
                - transform
                - batch
              exporters:
                - clickhouse
        ```
      </Tab>

      <Tab title="Linux предыдущих версий (Ubuntu 20.04, RHEL, CentOS)">
        ```yaml theme={null}
        receivers:
          filelog/syslog:
            include:
              - /var/log/syslog
              - /var/log/messages
              - /var/log/**/*.log
            start_at: end
            operators:
              - type: regex_parser
                regex: '^(?P<timestamp>\w+ \d+ \d{2}:\d{2}:\d{2}) (?P<hostname>\S+) (?P<unit>\S+?)(?:\[(?P<pid>\d+)\])?: (?P<message>.*)$'
                parse_from: body
                parse_to: attributes
              
              - type: time_parser
                parse_from: attributes.timestamp
                layout: '%b %d %H:%M:%S'
              
              - type: add
                field: attributes.source
                value: "host-logs"
              
              - type: add
                field: resource["service.name"]
                value: "host-production"

        service:
          pipelines:
            logs/host:
              receivers: [filelog/syslog]
              processors:
                - memory_limiter
                - transform
                - batch
              exporters:
                - clickhouse
        ```
      </Tab>

      <Tab title="macOS">
        ```yaml theme={null}
        receivers:
          filelog/syslog:
            include:
              - /var/log/system.log
              - /host/private/var/log/*.log
            start_at: end
            operators:
              - type: regex_parser
                regex: '^(?P<timestamp>\w+ \d+ \d{2}:\d{2}:\d{2}) (?P<hostname>\S+) (?P<unit>\S+?)(?:\[(?P<pid>\d+)\])?: (?P<message>.*)$'
                parse_from: body
                parse_to: attributes
              
              - type: time_parser
                parse_from: attributes.timestamp
                layout: '%b %d %H:%M:%S'
              
              - type: add
                field: attributes.source
                value: "host-logs"
              
              - type: add
                field: resource["service.name"]
                value: "host-production"

        service:
          pipelines:
            logs/host:
              receivers: [filelog/syslog]
              processors:
                - memory_limiter
                - transform
                - batch
              exporters:
                - clickhouse
        ```
      </Tab>
    </Tabs>

    <br />

    Все конфигурации:

    * Считывайте файлы syslog из стандартных расположений
    * Разберите формат syslog, чтобы извлечь структурированные поля (временная метка, имя хоста, unit/сервис, PID, сообщение)
    * Сохраняйте исходные временные метки логов
    * Добавьте атрибут `source: host-logs` для фильтрации данных в HyperDX
    * Направляйте журналы в экспортёр ClickHouse через выделенный конвейер

    <Note>
      - В пользовательской конфигурации вы определяете только новые приёмники и конвейеры
      - Процессоры (`memory_limiter`, `transform`, `batch`) и экспортёры (`clickhouse`) уже определены в базовой конфигурации ClickStack — вы просто ссылаетесь на них по имени
      - Regex-парсер извлекает имена юнитов systemd, PID и другие метаданные из формата syslog
      - В этой конфигурации используется `start_at: end`, чтобы избежать повторного приёма журналов при перезапуске коллектора. Для тестирования измените на `start_at: beginning`, чтобы сразу увидеть исторические журналы.
    </Note>
  </Step>

  <Step title="Настройте ClickStack для загрузки пользовательской конфигурации" id="load-custom">
    Чтобы включить пользовательскую конфигурацию collector в существующем развертывании ClickStack, необходимо:

    1. Смонтировать файл пользовательской конфигурации по пути `/etc/otelcol-contrib/custom.config.yaml`
    2. Задать переменную окружения `CUSTOM_OTELCOL_CONFIG_FILE=/etc/otelcol-contrib/custom.config.yaml`
    3. Смонтировать каталог syslog, чтобы collector мог читать из него

    ##### Вариант 1: Docker Compose

    Обновите конфигурацию развертывания ClickStack:

    ```yaml theme={null}
    services:
      clickstack:
        # ... existing configuration ...
        environment:
          - CUSTOM_OTELCOL_CONFIG_FILE=/etc/otelcol-contrib/custom.config.yaml
          # ... other environment variables ...
        volumes:
          - ./host-logs-monitoring.yaml:/etc/otelcol-contrib/custom.config.yaml:ro
          - /var/log:/var/log:ro
          # ... other volumes ...
    ```

    ##### Вариант 2: Docker Run (образ «всё в одном»)

    Если вы используете образ «всё в одном» через docker run:

    ```bash theme={null}
    docker run --name clickstack \
      -p 8080:8080 -p 4317:4317 -p 4318:4318 \
      -e CUSTOM_OTELCOL_CONFIG_FILE=/etc/otelcol-contrib/custom.config.yaml \
      -v "$(pwd)/host-logs-monitoring.yaml:/etc/otelcol-contrib/custom.config.yaml:ro" \
      -v /var/log:/var/log:ro \
      clickhouse/clickstack-all-in-one:latest
    ```

    <Note>
      Убедитесь, что у коллектора ClickStack есть необходимые разрешения на чтение файлов syslog. В рабочей среде используйте монтирования только для чтения (`:ro`) и придерживайтесь принципа наименьших привилегий.
    </Note>
  </Step>

  <Step title="Проверка журналов в HyperDX" id="verifying-logs">
    После настройки войдите в HyperDX и убедитесь, что журналы поступают:

    1. Перейдите в представление поиска
    2. В поле source выберите Logs
    3. Отфильтруйте по `source:host-logs`, чтобы увидеть журналы с конкретного хоста
    4. Вы должны увидеть структурированные записи журнала с такими полями, как `unit`, `hostname`, `pid`, `message` и т. д.

    <Image img="https://mintcdn.com/private-7c7dfe99/MFPY913TqoHcFPXJ/images/clickstack/host-logs/search-view.webp?fit=max&auto=format&n=MFPY913TqoHcFPXJ&q=85&s=b992405558374552a58772234847e150" alt="Представление поиска" width="3812" height="1936" data-path="images/clickstack/host-logs/search-view.webp" />

    <Image img="https://mintcdn.com/private-7c7dfe99/MFPY913TqoHcFPXJ/images/clickstack/host-logs/log-view.webp?fit=max&auto=format&n=MFPY913TqoHcFPXJ&q=85&s=9c79d3b1f1bb32597614b23c5fdc9dde" alt="Представление логов" width="3812" height="1936" data-path="images/clickstack/host-logs/log-view.webp" />
  </Step>
</Steps>

<div id="demo-dataset">
  ## Демо-набор данных
</div>

Для пользователей, которые хотят протестировать интеграцию журналов хоста перед настройкой своих рабочих систем, мы предоставляем демо-набор данных с заранее сгенерированными системными журналами, имитирующими реалистичные сценарии.

<Steps>
  <Step title="Скачайте демо-набор данных" id="download-sample">
    Скачайте демонстрационный файл журнала:

    ```bash theme={null}
    curl -O https://datasets-documentation.s3.eu-west-3.amazonaws.com/clickstack-integrations/host-logs/journal.log
    ```

    Набор данных включает:

    * Последовательность загрузки системы
    * Активность входа по SSH (успешные и неуспешные попытки)
    * Инцидент безопасности (brute-force-атака с реакцией fail2ban)
    * Плановое обслуживание (cron-задачи, anacron)
    * Перезапуски сервисов (rsyslog)
    * Сообщения ядра и активность межсетевого экрана
    * Сочетание обычных операций и заметных событий
  </Step>

  <Step title="Создайте тестовую конфигурацию коллектора" id="test-config">
    Создайте файл с именем `host-logs-demo.yaml` со следующей конфигурацией:

    ```yaml theme={null}
    cat > host-logs-demo.yaml << 'EOF'
    receivers:
      filelog/journal:
        include:
          - /tmp/host-demo/journal.log
        start_at: beginning
        operators:
          - type: regex_parser
            regex: '^(?P<timestamp>\S+) (?P<hostname>\S+) (?P<unit>\S+?)(?:\[(?P<pid>\d+)\])?: (?P<message>.*)$'
            parse_from: body
            parse_to: attributes
          
          - type: time_parser
            parse_from: attributes.timestamp
            layout: '%Y-%m-%dT%H:%M:%S%z'
          
          - type: add
            field: attributes.source
            value: "host-demo"
          
          - type: add
            field: resource["service.name"]
            value: "host-demo"

    service:
      pipelines:
        logs/host-demo:
          receivers: [filelog/journal]
          processors:
            - memory_limiter
            - transform
            - batch
          exporters:
            - clickhouse
    EOF
    ```
  </Step>

  <Step title="Запустите ClickStack с демо-конфигурацией" id="run-demo">
    Запустите ClickStack с демо-журналами и этой конфигурацией:

    ```bash theme={null}
    docker run --name clickstack-demo \
      -p 8080:8080 -p 4317:4317 -p 4318:4318 \
      -e CUSTOM_OTELCOL_CONFIG_FILE=/etc/otelcol-contrib/custom.config.yaml \
      -v "$(pwd)/host-logs-demo.yaml:/etc/otelcol-contrib/custom.config.yaml:ro" \
      -v "$(pwd)/journal.log:/tmp/host-demo/journal.log:ro" \
      clickhouse/clickstack-all-in-one:latest
    ```

    <Note>
      **Файл журнала монтируется прямо в контейнер. Это сделано для тестирования на статических демо-данных.**
    </Note>
  </Step>

  <Step title="Проверьте журналы в HyperDX" id="verify-demo-logs">
    После запуска ClickStack:

    1. Откройте [HyperDX](http://localhost:8080/) и войдите в свою учётную запись (возможно, сначала потребуется её создать)
    2. Перейдите в представление Search и выберите источник `Logs`
    3. Установите временной диапазон **2025-11-10 00:00:00 - 2025-11-13 00:00:00**

    <Image img="https://mintcdn.com/private-7c7dfe99/MFPY913TqoHcFPXJ/images/clickstack/host-logs/search-view.webp?fit=max&auto=format&n=MFPY913TqoHcFPXJ&q=85&s=b992405558374552a58772234847e150" alt="Представление Search" width="3812" height="1936" data-path="images/clickstack/host-logs/search-view.webp" />

    <Image img="https://mintcdn.com/private-7c7dfe99/MFPY913TqoHcFPXJ/images/clickstack/host-logs/log-view.webp?fit=max&auto=format&n=MFPY913TqoHcFPXJ&q=85&s=9c79d3b1f1bb32597614b23c5fdc9dde" alt="Представление логов" width="3812" height="1936" data-path="images/clickstack/host-logs/log-view.webp" />

    <Info>
      **Отображение часового пояса**

      HyperDX отображает временные метки в локальном часовом поясе вашего браузера. Демо-данные охватывают период **2025-11-11 00:00:00 - 2025-11-12 00:00:00 (UTC)**. Широкий временной диапазон гарантирует, что вы увидите демо-журналы независимо от своего местоположения. После этого можно сузить диапазон до 24 часов для более наглядной визуализации.
    </Info>
  </Step>
</Steps>

<div id="dashboards">
  ## Панели мониторинга и визуализация
</div>

Чтобы вам было проще начать мониторинг журналов хоста с помощью ClickStack, мы предоставляем основные визуализации для системных журналов.

<Steps>
  <Step title="Скачать конфигурацию панели мониторинга" id="download">
    <TrackedLink href={'https://clickhouse-docs-assets.s3.us-east-1.amazonaws.com/examples/host-logs-dashboard.json'} download="host-logs-dashboard.json" eventName="docs.host_logs_monitoring.dashboard_download">Скачать файл конфигурации панели мониторинга</TrackedLink>.
  </Step>

  <Step title="Импортируйте преднастроенный дашборд" id="import-dashboard">
    1. Откройте HyperDX и перейдите в раздел Dashboards
    2. Нажмите **Import Dashboard** в правом верхнем углу в меню с многоточием

    <Image img="https://mintcdn.com/private-7c7dfe99/MFPY913TqoHcFPXJ/images/clickstack/import-dashboard.webp?fit=max&auto=format&n=MFPY913TqoHcFPXJ&q=85&s=ec4eae8ea8e1f77c9b5897b45339b08b" alt="Кнопка импорта панели мониторинга" width="3024" height="556" data-path="images/clickstack/import-dashboard.webp" />

    3. Загрузите файл `host-logs-dashboard.json` и нажмите **Finish Import**

    <Image img="https://mintcdn.com/private-7c7dfe99/MFPY913TqoHcFPXJ/images/clickstack/host-logs/import-dashboard.webp?fit=max&auto=format&n=MFPY913TqoHcFPXJ&q=85&s=b3bc1c3bbf00fe2f478af7c76d6cc40f" alt="Завершение импорта" width="3808" height="1908" data-path="images/clickstack/host-logs/import-dashboard.webp" />
  </Step>

  <Step title="Откройте панель мониторинга" id="created-dashboard">
    Панель мониторинга будет создана со всеми преднастроенными визуализациями:

    <Image img="https://mintcdn.com/private-7c7dfe99/MFPY913TqoHcFPXJ/images/clickstack/host-logs/host-logs-dashboard.webp?fit=max&auto=format&n=MFPY913TqoHcFPXJ&q=85&s=1aad879efd27fe772a4b24780f878b5e" alt="Панель мониторинга журналов" width="3808" height="1908" data-path="images/clickstack/host-logs/host-logs-dashboard.webp" />

    Основные визуализации:

    * Объём журналов во времени по уровням серьёзности
    * Юниты systemd, генерирующие больше всего журналов
    * Активность входа по SSH (успешные и неудачные попытки)
    * Активность межсетевого экрана (заблокировано и разрешено)
    * События безопасности (неудачные входы, баны, блокировки)
    * Активность перезапуска сервисов

    <Note>
      Для демо-набора данных установите временной диапазон **2025-11-11 00:00:00 - 2025-11-12 00:00:00 (UTC)** (скорректируйте его в соответствии с вашим часовым поясом). В импортированной панели мониторинга по умолчанию временной диапазон не задан.
    </Note>
  </Step>
</Steps>

<div id="troubleshooting">
  ## Устранение неполадок
</div>

<div id="troubleshooting-not-loading">
  ### Пользовательская конфигурация не загружается
</div>

Убедитесь, что переменная окружения задана:

```bash theme={null}
docker exec <container-name> printenv CUSTOM_OTELCOL_CONFIG_FILE
```

Проверьте, что пользовательский конфигурационный файл смонтирован и доступен для чтения:

```bash theme={null}
docker exec <container-name> cat /etc/otelcol-contrib/custom.config.yaml | head -10
```

<div id="no-logs">
  ### Журналы не отображаются в HyperDX
</div>

**Убедитесь, что файлы syslog существуют и в них записываются данные:**

```bash theme={null}
# Проверить наличие syslog
ls -la /var/log/syslog /var/log/messages

# Убедиться, что журналы записываются
tail -f /var/log/syslog
```

**Проверьте, что collector может считывать журналы:**

```bash theme={null}
docker exec <container> cat /var/log/syslog | head -20
```

**Проверьте, что в итоговую конфигурацию включён ваш ресивер filelog:**

```bash theme={null}
docker exec <container> cat /etc/otel/supervisor-data/effective.yaml | grep -A 10 filelog
```

**Проверьте журналы collector на наличие ошибок:**

```bash theme={null}
docker exec <container> cat /etc/otel/supervisor-data/agent.log | grep -i "filelog\|syslog"
```

**Если вы используете демо-набор данных, убедитесь, что файл журнала доступен:**

```bash theme={null}
docker exec <container> cat /tmp/host-demo/journal.log | wc -l
```

<div id="logs-not-parsing">
  ### Логи разбираются некорректно
</div>

**Убедитесь, что формат syslog соответствует выбранной конфигурации:**

Для современных дистрибутивов Linux (Ubuntu 24.04+):

```bash theme={null}
# Должен отображаться формат ISO8601: 2025-11-17T20:55:44.826796+00:00
tail -5 /var/log/syslog
```

Для устаревших версий Linux или macOS:

```bash theme={null}
# Должен отображаться традиционный формат: Nov 17 14:16:16
tail -5 /var/log/syslog
# или
tail -5 /var/log/system.log
```

Если ваш формат не подходит, выберите вкладку с нужной конфигурацией в разделе [Создание пользовательской конфигурации OTel collector](#custom-otel).

<div id="next-steps">
  ## Следующие шаги
</div>

* Настройте [оповещения](/docs/ru/clickstack/features/alerts) для критически важных системных событий (сбои сервиса, ошибки аутентификации, предупреждения о состоянии диска)
* Фильтруйте по конкретным юнитам, чтобы отслеживать отдельные сервисы
* Коррелируйте журнал хоста с журналами приложений для комплексной диагностики и устранения неполадок
* Создайте пользовательские панели мониторинга для мониторинга безопасности (попытки SSH, использование sudo, блокировки межсетевым экраном)

<div id="going-to-production">
  ## Переход к продакшну
</div>

В этом руководстве для быстрой настройки используется встроенный в ClickStack OpenTelemetry Collector. Для развертываний в продакшне мы рекомендуем запускать собственный OTel Collector и отправлять данные в конечную точку OTLP ClickStack. Инструкции по настройке для продакшна см. в разделе [Отправка данных OpenTelemetry](/docs/ru/clickstack/ingesting-data/opentelemetry).
