Wednesday, May 22, 2019

script monitor trafik mikrotik

Yup, dah tau maksudnya kan ? kali ini saya akan share tips gimana caranya jalanin monitor trafik pada interface tertentu (ether1 misalnya) pada pelanggan, yang nantinya dapat digunakan sebagai report ke pelanggan bahwa penggunaan dalam satu bulan ini sudah mencapai sekian GigaByte. Begitu lah kira kira. nah berikut scriptnya, silahkan dibikin scheduler

:global iface ether1
:global trafikawal
:global trafik
# reset tanggal 1
#/system ntp client set primary-ntp=[:resolve id.pool.ntp.org] enabled=yes
#/system clock set time-zone-name="Asia/Jakarta"
:local date [/system clock get date]
:local tanggal [ :pick $date 4 6 ]
#:log warning $tanggal
:if ($tanggal = 1) do={:set trafikawal 0}
:set trafikawal [/interface get [find name=$iface] tx-byte]
   :if ($trafikawal > 1073741824) do={
   :set trafik ($trafikawal / 1073741824)
   :set trafik ($trafik." GB")
   } else={
   :set trafik ($trafikawal / 1048576)
   :set trafik ($trafik." MB")
   }
:log warning "trafik $iface = $trafik"
/in ethernet set $iface comment="$trafikawal"

Nah, setelah diteliti lagi, ternyata script diatas masih ada kekurangan, yaitu ketika perangkat reboot, kereset jadi 0, akhirnya gw ubah jadi revisi scriptnya begini

:global iface ether1
:global trafikFresh
:global trafikSave
:global trafikBit
:global trafikBytes
:global trafikTotal
:local date [/system clock get date]
:local tanggal [ :pick $date 4 6 ]
#:log warning $tanggal
:if ($tanggal = 1) do={:set trafikBit 0}
# jika direboot ambil dari comment interface
:if ([:len $trafikFresh ] = 0) do={
:set trafikSave [/interface get [find name=$iface] comment]
# catat ke variable
:set trafikFresh [/interface get [find name=$iface] tx-byte]
:set trafikTotal ([:tonum $trafikSave] + [:tonum $trafikFresh])
:set trafikBit $trafikTotal
} else={
:set trafikBit  [/interface get [find name=$iface] tx-byte]
:set trafikTotal ([:tonum $trafikSave] + [:tonum $trafikBit])
}
# jika ukuran gigabyte
:if ($trafikTotal > 1073741824) do={
:set trafikBytes ($trafikTotal / 1073741824)
:set trafikBytes ($trafikBytes." GB")
} else={
:set trafikBytes ($trafikTotal / 1048576)
:set trafikBytes ($trafikBytes." MB")
}
:log warning "trafik $iface = $trafikBytes"
/in ethernet set $iface comment="$trafikTotal"

nanti hasilnya seperti berikut :

Saturday, May 18, 2019

Script Mikrotik Cek Intermittent


Hmm.. kali ini mimin bakal share tips & trik cara gimana saat link intermittent maka dilakukan tindakan, di sini mimin disable peer yg ngarah ke sono. Bisa sobat kembangkan sendiri yah. Ok langsung aja bikin scheduler
:global intermit
:global melar
:global limitnotif
:local avgRtt;
:local pin
:local pout
:local target 124.195.38.1
/tool flood-ping $target count=10 do={
  :if ($sent = 10) do={
    :set avgRtt $"avg-rtt"
    :set pout $sent
    :set pin $received
  }
}
:local ploss (100 - (($pin * 100) / $pout))
:local LogErrorMsg ("Ping average for host%0A$target = ".[:tostr $avgRtt]."ms%0Apacket loss = ".[:tostr $ploss]."%")
:local LogWarnMsg ("Ping average for host%0A$target = ".[:tostr $avgRtt]."ms%0Apacket loss = ".[:tostr $ploss]."%")
:local LogError ("Ping average for $target = ".[:tostr $avgRtt]."ms - packet loss: ".[:tostr $ploss]."%")
:local LogWarn ("Ping average for $target = ".[:tostr $avgRtt]."ms - packet loss: ".[:tostr $ploss]."%")
:if ($avgRtt > 20) do={
:set melar ($melar +1)
:log error "$LogError"
} else={
:log warning "$LogWarn"
:set melar 0
}
# jika packetloss diatas 10% maka
:if ([:tostr $ploss] > 10) do={
   :set intermit ($intermit +1)
   :set limitnotif ($limitnotif +1)
   } else={
   :set intermit 0
   }
# jika intermitent terus
:if ($intermit >=10) do={
   :local pesan "$LogErrorMsg"
   /routing bgp peer set [find name~"INIX" disabled=no] disabled=yes
   /ip firewall mangle set [find comment="backup_conn" disabled=yes] disabled=no
   :if ($limitnotif = 2) do={
      /tool fetch url="https://api.telegram.org/bot380921546:AAGn69QpFDuLSOQd3E3JtI5nhfKDkdKMW/sendMessage?chat_id=-20353xxx&text=$pesan" keep-result=no
     }
   }
# jika tidak intermitent
:if ($intermit = 0) do={
   :if ($limitnotif >=10)  do={
   :set limitnotif 0
   }
   :if ($limitnotif =0) do={
   :set limitnotif ($limitnotif +1)
   }
   /routing bgp peer set [find name~"INIX" disabled=yes] disabled=no
   /ip firewall mangle set [find comment="backup_conn" disabled=no] disabled=yes
   :local pesan "$LogWarnMsg"
   :if ($limitnotif =2) do={
      /tool fetch url="https://api.telegram.org/bot380921546:AAGn69QpFDuLSOQd3E3JtI5nhfKDkdKMW/sendMessage?chat_id=-20353xxx&text=$pesan" keep-result=no
      }
   }