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?

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 your-xmpp-id@gmail.com

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 recipient@gmail.com; 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 ...)


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 = 'YourFriend@gmail.com'
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.


Apakah ini memerlukan ketergantungan Python atau XMPP disertakan dengan Base?
Tom

1
Anda harus menginstalnya dari xmpppy.sourceforge.net
Alex Jasmin
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.