2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Go言語でsyslogを受信する方法

Posted at

はじめに

Go言語でsyslogを受信するためのパッケージgo-syslog

の使い方を説明します。

syslogを受信するプログラムの作り方

インストール

$go get gopkg.in/mcuadros/go-syslog.v2

受信プログラム


package main

import (
	"fmt"
	"log"

	"gopkg.in/mcuadros/go-syslog.v2"
)

func main() {
	channel := make(syslog.LogPartsChannel)
	handler := syslog.NewChannelHandler(channel)

	server := syslog.NewServer()
	server.SetFormat(syslog.Automatic)
	server.SetHandler(handler)
	err := server.ListenUDP("0.0.0.0:514")
	if err != nil {
		log.Fatalln(err)
	}
	err = server.Boot()
	if err != nil {
		log.Fatalln(err)
	}
	go func(channel syslog.LogPartsChannel) {
		for logParts := range channel {
			fmt.Println(logParts)
		}
	}(channel)

	server.Wait()
}

このプログラムのポイントは

チャネルの作成とハンドラー登録

channel := make(syslog.LogPartsChannel)
handler := syslog.NewChannelHandler(channel)

受信したsyslogを受け取るチャネルを作成してハンドラーに登録します。

syslogの形式を自動判別

server.SetFormat(syslog.Automatic)

です、フォーマットが決まっている場合は、


RFC3164   = &format.RFC3164{}   // RFC3164: http://www.ietf.org/rfc/rfc3164.txt
RFC5424   = &format.RFC5424{}   // RFC5424: http://www.ietf.org/rfc/rfc5424.txt
RFC6587   = &format.RFC6587{}   // RFC6587: http://www.ietf.org/rfc/rfc6587.txt - octet counting variant
Automatic = &format.Automatic{} // Automatically identify the format

の指定ができます。

TCPで受信する場合は、

-	err := server.ListenUDP("0.0.0.0:8514")
+	err := server.ListenTCP("0.0.0.0:8514")
	if err != nil {
		log.Fatalln(err)
	}

のようにすればよいです。両方受信もできます。

実行結果

$go run main.go
map[client:192.168.1.13:37943 content:/dev/root         30450024 8009816 21151964   28% / facility:1 hostname:raspberrypi priority:13 severity:5 tag:diskmon timestamp:2024-09-26 17:13:01 +0000 UTC tls_peer:]
map[client:192.168.1.13:37943 content:Mem:        3878088      114700     3137720      197104      625668     3436204 facility:1 hostname:raspberrypi priority:13 severity:5 tag:memmon timestamp:2024-09-26 17:13:01 +0000 UTC tls_peer:]

余談

このパッケージは、TWSNMP FC/FKの中で使っています。

1日数GB受信するようなヘビーな環境でも問題なく使えています。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?