Elasticsearch:Golang ECS 日志记录 - zerolog
package main
import (
"bytes"
"context"
"encoding/json"
"fmt"
"github.com/elastic/go-elasticsearch/v8"
"github.com/elastic/go-elasticsearch/v8/esapi"
"github.com/rs/zerolog"
"io"
"os"
)
// 初始化Zerolog记录器
func newLogger() *zerolog.Logger {
output := zerolog.ConsoleWriter{Out: os.Stdout}
log := zerolog.New(output).With().Timestamp().Logger()
return &log
}
// 发送ECS格式的日志到Elasticsearch
func sendLogToElasticsearch(logEntry map[string]interface{}, esClient *elasticsearch.Client) error {
buf, err := json.Marshal(logEntry)
if err != nil {
return err
}
// 使用Elasticsearch的API发送日志
req := esapi.IndexRequest{
Index: "logs",
DocumentType: "ecs_logs",
Body: bytes.NewReader(buf),
Refresh: "true",
}
res, err := req.Do(context.Background(), esClient)
if err != nil {
return err
}
defer res.Body.Close()
if res.IsError() {
return fmt.Errorf("error indexing document: %s", res.String())
}
var r map[string]interface{}
if err := json.NewDecoder(res.Body).Decode(&r); err != nil {
return err
}
// 打印Elasticsearch响应
fmt.Println(r)
return nil
}
func main() {
// 初始化Elasticsearch客户端
esClient, err := elasticsearch.NewDefaultClient()
if err != nil {
panic(err)
}
// 初始化Zerolog记录器
log := newLogger()
// 创建ECS兼容的日志条目
logEntry := map[string]interface{}{
"log.level": "info",
"message": "ECS兼容的日志条目",
// ...其他ECS字段
}
// 发送日志到Elasticsearch
err = sendLogToElasticsearch(logEntry, esClient)
if err != nil {
log.Error().Err(err).Msg("发送日志到Elasticsearch失败")
}
}
这个代码示例展示了如何使用Zerolog库来创建ECS兼容的日志条目,并使用Elasticsearch Go客户端将其发送到Elasticsearch。首先,它初始化了一个Zerolog记录器,然后创建了一个ECS兼容的日志条目,并通过Elasticsearch API将其发送到Elasticsearch索引。如果在发送过程中出现错误,它会使用Zerolog记录器来记录错误信息。
评论已关闭