【系统审计】 采集osquery输出发送到kafka

/*
参考github地址
https://github.com/segmentio/kafka-go
https://github.com/kolide/osquery-go
脚本启动示例:go run testQuery.go /root/.osquery/shell.em "select * from sudoers;"
*/


package main

import (
        "fmt"
        "context"
        "os"
        "time"
        "log"
        "encoding/json"
        "github.com/kolide/osquery-go"
        "github.com/segmentio/kafka-go"
        osquery2 "github.com/kolide/osquery-go/gen/osquery"
)



func main(){
    data :=  getData()
    for key,_  := range data  {
                stringtest := mapToString(data[key])
                fmt.Println(stringtest)
                sendKafka(stringtest)
        }
}




func getData()(data osquery2.ExtensionPluginResponse ) {
        if len(os.Args) != 3 {
                log.Fatalf("Usage: %s SOCKET_PATH QUERY", os.Args[0])
        }

        client, err := osquery.NewClient(os.Args[1], 2*time.Second)
        if err != nil {
                log.Fatalf("Error creating Thrift client: %v", err)
        }
        defer client.Close()

        resp, err := client.Query(os.Args[2])
        if err != nil {
                log.Fatalf("Error communicating with osqueryd: %v",err)
        }
        if resp.Status.Code != 0 {
                log.Fatalf("osqueryd returned error: %s", resp.Status.Message)
        }

        return resp.Response
}




func mapToString(param map[string]string) string {
	dataType ,_ := json.Marshal(param)
	dataString := string(dataType)
	return dataString
}


func sendKafka(para string) {
	topic := "my-topic"
	partition := 0

	conn, err := kafka.DialLeader(context.Background(), "tcp", "192.168.244.143:9092", topic, partition)
	if err != nil {
		log.Fatal("failed to dial leader:", err)
	}

	conn.SetWriteDeadline(time.Now().Add(10*time.Second))
	_, err = conn.WriteMessages(
		kafka.Message{Value: []byte(para)},
	)
	if err != nil {
		log.Fatal("failed to write messages:", err)
	}

	if err := conn.Close(); err != nil {
		log.Fatal("failed to close writer:", err)
	}
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值