讓RouterOS自動把Log檔email出去

讓RouterOS自動把Log檔Mail出去,這個動作可以拆成2個步驟來執行

1.在System->Script建立相關的Script(產生Log檔案,發送mail)

2.在System->Scheduler建立排程(判斷Log的行數到達我們的設定值就Mail出去)

第1個部份,先建立2個Script

建立一個名為MailLog的Script

請修改SMTP伺服器位置(記得ROS的DNS要有,才可以解析)、寄件人、收件人的資訊


#Script在RouterOS 3.20中測試通過
#Date:2009/03/14
#Script Name:MailLog

#SMTP伺服器位置
:local SMTP "xxx.smtp.com"

#寄件人
:local MailFrom "ROSLog<ROS@xxxxxxxxx.com>"

#收件人
:local MailTo "REC@xxxxxxxxx.com"

#Log檔的名稱(位於/file)
:local LogFileName

#寄出後是否刪除已存檔的Log(/file裡的檔案)
#0=保留  1=刪除
:local DeleteLogFile 1

:set LogFileName ([/system identity get name] . "Log-" . [:pick [/system clock get date] 7 11] . [:pick [/system clock get date] 0 3] . [:pick [/system clock get date] 4 6] . ".txt");

/tool e-mail set from=$MailFrom;

/log print file=[$LogFileName];

/tool e-mail send to=$MailTo server=[:resolve $SMTP] subject=([/system identity get name] . " Log " . [/system clock get date]) file=[$LogFileName];

:delay 10;

:if ($DeleteLogFile =1) do={
/file rem [/file find name=($LogFileName)];
}

:log info ("System Log emailed at " . [/sys cl get time] . " " . [/sys cl get date]);

接下來建立名為AutoMailLog的Script

超過幾條就把Log寄出去請依照你的實際需要設置

寄出後會自動清空Log,如果你想保留Log

那就把:local IsClearLog 1 改為:local IsClearLog 0

不過這樣子會造成每次都會寄發Mail,請特別注意


#Script在RouterOS 3.20中測試通過
#Date:2009/03/14
#Script Name:AutoMailLog

#超過幾條就把Log寄出去
:local MaxLine 300

#寄出後是否要清空現有的Log資訊
#0=保留  1=清空
:local IsClearLog 1

:if ([/log print count-only] >= $MaxLine) \
do={
/system script run MailLog;
:if ($IsClearLog = 1) \
do={/system script run ClearMemoryLog;}
}

第2個部份是建立Scheduler排程

在System->Scheduler 新增一個名為MailLog的排程

內容只有一行,時間是我是設定為5分鍾跑一次


/system script run AutoMailLog

最後總結一下,整個流程如下圖

參考資料:http://forum.mikrotik.com/viewtopic.php?f=9&t=29122

16 thoughts on “讓RouterOS自動把Log檔email出去

    1. GMail 的SMTP是需要帶帳號密碼驗証的,而RouterOS 3.20(含)以下目前並沒有支援

      不過3.25版以上似乎就有支援此種帶帳號密碼驗証的方式。因手邊沒有最新的版本,沒辦法試。

      /tool e-mail send to=”myhotmail@hotmail.com” from=”myhotmail@hotmail.com” user=”myhotmail@hotmail.com” password=”myhotmailpass” server=65.55.172.254 s
      ubject=”testing” body=”testing testing” file=testfile

      可以參考這個網址
      http://forum.mikrotik.com/viewtopic.php?f=9&t=32814

  1. 那請問版大 你是用哪一個MAIL
    來做設定的ㄋ?

    順道問依下 版大 方便留 MSN 給小弟

    讓我有問題 直接方便 請教

    1. 抱歉最近比較忙沒時間回覆
      我是使用Hinet的線路,所以是使用Hinet提供的SMTP
      如果你也是Hinet的線路的話
      可以把 Script 裡的 SMTP 換成下面這樣

      #SMTP伺服器位置
      :local SMTP “msa.hinet.net”

      有問題的話大家再研究一下

  2. to Gemma:
    1.先把firewall擋的規則全部關閉。
    2.於ROS上使用ping的工具測試ROS本機連gmail的smtp server可否可通。
    3.看看gmail上的帳號,是否有開啟允許使用smtp service。
    4.察看log檔,觀察失敗的原因。

  3. 先感謝您分享的文章:
    另外以下是小弟修改您的指令及語法所完成的,再6.30.1寄出後清空Log資訊
    必須更改為:
    /system logging action set memory memory-lines=1;
    /system logging action set memory memory-lines=1000;
    小弟此回饋給大家謝謝
    ————————————————————————————————————–
    #Script在RouterOS 6.30.1中測試通過
    #Date:2015/07/30
    #Script Name:AutoMailLog

    #超過幾條就把Log寄出去
    :local MaxLine 900

    #寄出後是否要清空現有的Log資訊
    #0=保留 1=清空
    :local IsClearLog 1

    :if ([/log print count-only] >= $MaxLine) \
    do={
    /system script run MailLog;
    :if ($IsClearLog = 1) \
    do={/system logging action set memory memory-lines=1;
    /system logging action set memory memory-lines=1000;}
    }

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *