Log server ekor ke XMPP?

8

Jadi saya punya dua file, dan jika baris baru muncul di salah satu file ini, saya ingin menerima IM (lebih disukai jabber atau gTalk) yang mengandung konten dari baris itu. Apakah kalian punya saran untuk daemon Linux atau sesuatu yang bisa melakukan itu?

icco
sumber

Jawaban:

14

Jika Anda masuk melalui syslog, Metalog memiliki dukungan untuk mengeksekusi perintah setiap kali pesan yang cocok dengan beberapa kriteria dicatat. Jika tidak, Anda dapat menggunakan tailfuntuk menonton baris baru dalam file log.

sendxmpp adalah skrip perl kecil untuk mengirim pesan XMPP (mungkin sudah tersedia sebagai paket untuk distribusi favorit Anda)

Anda bisa menjahit keduanya bersama-sama dengan skrip shell tanpa terlalu banyak kesulitan. Untuk kasus metalog, buat skrip seperti ini:

#!/bin/sh
echo $* |sendxmpp [email protected]

Dan tambahkan command = /path/to/script.shke bagian yang relevan dari metalog.conf

Untuk kasus tailf, Anda dapat mencoba sesuatu seperti ini, jalankan dengan cara yang gigih:

tailf /var/log/file-to-watch.log |(while true; do read M; echo $M | sendxmpp [email protected]; done)

sendxmpp memerlukan akun XMPP yang valid, lihat halaman manual cara mengkonfigurasi akun yang akan digunakan.

(dari pengalaman saya, pesan kesalahan yang dikirim XMPP cenderung menjadi sangat menjengkelkan jika terlalu sering ...)

b0fh
sumber
Lucu sekali. Saya baru saja menemukan sendxmpp dan mengatur sesuatu seperti ini. Tidak pernah mendengar tentang tailf, terima kasih.
icco
Catatan: Jika ada masalah, periksa perilaku penyangga pipa Anda! (Jika Anda ingin grep, Anda mungkin harus menambah --line-bufferedmantera agar pesan muncul.) Saya hanya menghabiskan waktu yang baik untuk mencari tahu mengapa pesan muncul dengan sembarangan atau tidak sama sekali.
tidak ada yang
2

Saya membuat skrip python kecil itu. Anda dapat menggunakannya sebagai titik awal

import xmpp, os, time

login     = 'Your.Login' # @gmail.com
pwd       = 'YourPassword'
recipient = '[email protected]'
logfile   = "/home/myself/test.log"

def sendmsg(text):
  global login, pwd, recipient
  cnx = xmpp.Client('gmail.com')
  cnx.connect( server=('talk.google.com',5223) )
  cnx.auth(login,pwd, 'botty')
  cnx.send( xmpp.Message( recipient , text ) )

oldsize = newsize = os.path.getsize(logfile)
while True:
  newsize = os.path.getsize(logfile)
  if newsize != oldsize:
    f = open(logfile)
    f.seek(oldsize, os.SEEK_SET)
    s = f.read()
    if s[-1] == '\n':
      sendmsg(s)
      oldsize = f.tell()
    f.close()
  time.sleep(10)

Saya menggunakan informasi pada halaman itu untuk menghubungkan xmpppy ke Google Talk.

Alex Jasmin
sumber
Apakah ini memerlukan ketergantungan Python atau XMPP disertakan dengan Base?
Tom
1
Anda harus menginstalnya dari xmpppy.sourceforge.net
Alex Jasmin