---
title: 'MikroTik: отправка логов в Telegram без внешних серверов'
summary: 'Пошаговая инструкция по настройке автоматической отправки критических логов MikroTik в Telegram через встроенные скрипты RouterOS. Фильтрация событий, предотвращение дублей, советы по безопасности и расширению.'
date: '2025-01-18'
draft: false
tags:
- mikrotik
- telegram
- routeros
- мониторинг
- безопасность
- автоматизация
---
# 🛠️ Инструкция: Настройка отправки логов MikroTik в Telegram

Привет! сегодня научу тебя настраивать мгновенные оповещения о критических событиях с MikroTik прямо в Telegram. Всё делается через родные скрипты RouterOS — никаких внешних серверов!

## 🔍 Что мы сделаем
- Настроим фильтрацию логов по важным событиям
- Отправляем уведомления в Telegram через бота
- Гарантируем уникальность сообщений (без спама)

## ⚙️ Предварительные требования
1. Устройство MikroTik с RouterOS v6+
2. Доступ к интернету (разрешен `api.telegram.org`)
3. Telegram-бот (создай через [@BotFather](https://t.me/BotFather))
4. ID чата (узнай через [@userinfobot](https://t.me/userinfobot))

## 🚀 Пошаговая настройка

### Шаг 1: Создаем скрипт
Зайди в Winbox → `System` → `Scripts` → Добавь новый скрипт:
```routeros
# Название: telegram-log-sender
:local chat_id "ВАШ_CHAT_ID"     # Замени на реальный ID
:local bot_token "ВАШ_ТОКЕН"     # Токен бота от @BotFather
:local last_log_time [/log get [find] time]
:local prefixes ("dhcp", "interface", "error") # Твои ключевые префиксы

:local logs ""
:local last_unique_log ""

:foreach prefix in=$prefixes do={
  :local prefix_logs [/log find where time>($last_log_time + 1h) and message~($prefix)]
  
  :foreach log in=$prefix_logs do={
    :local log_entry [/log get $log]
    :local log_message ($log_entry->"message")
    
    # Фильтр дубликатов
    :if ($log_message != $last_unique_log) do={
      :set logs ($logs . "⚠️ " . $log_message . "\n\n")
      :set last_unique_log $log_message
    }
  }
}

# Отправка в Telegram
:if ($logs != "") do={
  :local url ("https://api.telegram.org/bot" . $bot_token . "/sendMessage")
  :local data ("chat_id=" . $chat_id . "&text=" . $logs)
  /tool fetch url=$url mode=http http-method=post http-data=$data
}

# Обновляем метку времени
:set last_log_time [/log get [find] time]
```

### Шаг 2: Настраиваем планировщик
В Winbox → `System` → `Scheduler` → Добавь новое задание:
```routeros
Name: telegram-logs
Interval: 5m
On Event: /system script run telegram-log-sender
```

### Шаг 3: Проверяем работу
1. Сымитируй событие в логах:
   ```bash
   /log info message="dhcp: Test lease added"
   ```
2. Жди до 5 минут
3. Проверь Telegram-чат:

   ![Пример уведомления](https://i.imgur.com/3JxWqcl.png)

## 🚨 Возможные проблемы и решения

| Симптом | Проверка | Исправление |
|---------|----------|-------------|
| Сообщения не приходят | `:put [:resolve "api.telegram.org"]` | Разреши DNS и доступ |
| "failure" в логах | `/tool fetch url="https://api.telegram.org"` | Проверь токен и chat_id |
| Дубли сообщений | Проверь `last_unique_log` логику | Добавь больше префиксов в фильтр |
| Обрезанные сообщения | `:put [:len $logs]` | Разбей сообщение на части по 4000 символов |

## 💡 Продвинутые настройки

### Добавляем форматирование
Измени блок отправки для Markdown:
```routeros
:local data ("chat_id=" . $chat_id . "&parse_mode=Markdown&text=*Router Alert!*%0A" . $logs)
```

### Фильтр по критичности
Добавь приоритеты в скрипт:
```routeros
:local levels ("error", "warning")
...
and message~($prefix) and topics~($level)
```

### Защита токена (только ROS v7+)
```routeros
:local bot_token [/certificate get telegram_token value-name=key]
# Где telegram_token - имя зашифрованного сертификата
```

## 🌟 Советы
1. **Тестовый режим**: сначала добавь префикс `test` и проверь работу
2. **Ограничение частоты**: при >50 событиях/мин добавь задержку
   ```routeros
   :delay 3s
   ```
3. **Визуализация**: используй emoji в сообщениях (⚠️🔥🚨)
4. **Резервный канал**: продублируй на почту через `/tool e-mail`

Обновил скрипт или нашел ошибку? Дай знать в обратной связи!