
TWLogAIAN:リモートLinuxサーバーのログをscpで直接読み込みできた
昨日は遅くまでオリンピックのスピードスケートを観ていたので今朝は6時まで寝てしまいました。
3日も休みがあったのでログ分析ツールの開発が進みました。syslogやアクセスログの表示に対応できたので実際のLinuxサーバーのログを分析したくなりました。LinuxサーバーからTWLogAIANが動作するPCにファイルを転送して読み込むことはできますが、ちょっと面倒です。リモートのLinuxサーバーから直接読み込む方法を考えました。scpを使えばできそうなので使えそうなGO言語のパッケージを探したところ良いものを見つけました。
試してにテストプログラムを作ってみました。
package main
import (
"context"
"fmt"
"io/ioutil"
"log"
"os"
"path"
"time"
"github.com/viant/afs/scp"
)
func main() {
kpath := path.Join(os.Getenv("HOME"), ".ssh", "id_rsa")
auth := scp.NewKeyAuth(kpath, "root", "")
log.Println(auth.Username())
provider := scp.NewAuthProvider(auth, nil)
config, err := provider.ClientConfig()
if err != nil {
log.Fatal(err)
}
service, err := scp.NewStorager("192.168.1.6:22", time.Duration(time.Second), config)
if err != nil {
log.Fatal(err)
}
location := "/var/log/syslog"
ctx := context.Background()
reader, err := service.Open(ctx, location)
if err != nil {
log.Fatal(err)
}
data, err := ioutil.ReadAll(reader)
if err != nil {
log.Fatal(err)
}
fmt.Printf("data: %s\n", data)
has, _ := service.Exists(ctx, location)
fmt.Printf("%v %v\n", location, has)
files, err := service.List(ctx, "/var/log")
if err != nil {
log.Fatal(err)
}
for _, file := range files {
fmt.Printf("file: %v\n", file.Name())
}
}
うまく動きました。使えそうです。
組み込んでましたが、Linuxサーバー上のログファイルは古くなるとgzip形式で圧縮されたファイルになっています。これも直接読み込みたいという野望が芽生えました。これもGO言語標準の
を使えば簡単に対応できました。
設定を

のようにすると、192.168.1.6のLinuxサーバーの/var/logディレクトリからファイル名のパターンがsyslog*のログファイルを直接読み込んでインデックス作成できました。

検索もできます。

かなり嬉しい! この開発は、
です。
gz形式の圧縮ファイルに対応できたので、ZIPやtar.gz形式のアーカイブファイルにも対応したくなってきました。調査するログはZIPやtar.gz形式でもらうことが多いので作ると便利だと思っています。
対応する方法を考え始めましたが、今朝は時間切れです。
明日に続く
いいなと思ったら応援しよう!
