add signoz
This commit is contained in:
parent
c6f8ab690f
commit
4cbabe4282
|
@ -0,0 +1,25 @@
|
||||||
|
package logger
|
||||||
|
|
||||||
|
const (
|
||||||
|
CtxKeyRequestID = "request_id"
|
||||||
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
SeverityTraceLevel = 6
|
||||||
|
SeverityDebugLevel = 5
|
||||||
|
SeverityInfoLevel = 4
|
||||||
|
SeverityWarnLevel = 3
|
||||||
|
SeverityErrorLevel = 2
|
||||||
|
SeverityFatalLevel = 1
|
||||||
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
MapStringSeverityLevel = map[int]string{
|
||||||
|
SeverityFatalLevel: "FATAL", // Any error that is forcing a shutdown of the service or application to prevent data loss (or further data loss). I reserve these only for the most heinous errors and situations where there is guaranteed to have been data corruption or loss
|
||||||
|
SeverityErrorLevel: "ERROR", // Any error which is fatal to the operation, but not the service or application (can't open a required file, missing data, etc.). These errors will force user (administrator, or direct user) intervention. These are usually reserved (in my apps) for incorrect connection strings, missing services, etc.
|
||||||
|
SeverityWarnLevel: "WARN", // Anything that can potentially cause application oddities, but for which I am automatically recovering. (Such as switching from a primary to backup server, retrying an operation, missing secondary data, etc.)
|
||||||
|
SeverityInfoLevel: "INFO", // Generally useful information to log (service start/stop, configuration assumptions, etc). Info I want to always have available but usually don't care about under normal circumstances. This is my out-of-the-box config level.
|
||||||
|
SeverityDebugLevel: "DEBUG", // Information that is diagnostically helpful to people more than just developers (IT, sysadmins, etc.).
|
||||||
|
SeverityTraceLevel: "TRACE", // Only when I would be "tracing" the code and trying to find one part of a function specifically.
|
||||||
|
}
|
||||||
|
)
|
|
@ -0,0 +1,12 @@
|
||||||
|
package logger
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"go.uber.org/zap"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Fatal ...
|
||||||
|
func Fatal(content string, data LogData) {
|
||||||
|
jsonData, _ := json.Marshal(data)
|
||||||
|
zapLogger.Fatal(content, zap.String("data", string(jsonData)))
|
||||||
|
}
|
|
@ -0,0 +1,23 @@
|
||||||
|
package logger
|
||||||
|
|
||||||
|
type SignozConfiguration struct {
|
||||||
|
HttpEndPoint string // Example: http://signoz:2255
|
||||||
|
ServiceName string // Name server
|
||||||
|
}
|
||||||
|
|
||||||
|
type SignozLogPayload struct {
|
||||||
|
SeverityLevel int `json:"severity_level"`
|
||||||
|
Message string `json:"message"`
|
||||||
|
Data interface{} `json:"data"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// PRIVATE
|
||||||
|
type logData struct {
|
||||||
|
SeverityNumber int `json:"severity_number"`
|
||||||
|
SeverityText string `json:"severity_text"`
|
||||||
|
Timestamp int64 `json:"timestamp"`
|
||||||
|
TraceID string `json:"trace_id"`
|
||||||
|
SpanID string `json:"span_id"`
|
||||||
|
Message string `json:"message"`
|
||||||
|
Source string `json:"source"`
|
||||||
|
}
|
|
@ -0,0 +1,69 @@
|
||||||
|
package logger
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bytes"
|
||||||
|
"context"
|
||||||
|
"encoding/json"
|
||||||
|
"net/http"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
cfgSignoz SignozConfiguration
|
||||||
|
)
|
||||||
|
|
||||||
|
// InitSignoz ...
|
||||||
|
func InitSignoz(config SignozConfiguration) {
|
||||||
|
cfgSignoz = config
|
||||||
|
}
|
||||||
|
|
||||||
|
// SendLogToSignoz ...
|
||||||
|
func SendLogToSignoz(ctx context.Context, payload SignozLogPayload) error {
|
||||||
|
client := http.Client{}
|
||||||
|
b := generateBody(ctx, payload)
|
||||||
|
r, errRequest := http.NewRequest(http.MethodPost, cfgSignoz.HttpEndPoint, bytes.NewBuffer(b))
|
||||||
|
if errRequest != nil {
|
||||||
|
return errRequest
|
||||||
|
}
|
||||||
|
r.Header.Set("Content-Type", "application/json")
|
||||||
|
resp, errRequest := client.Do(r)
|
||||||
|
if errRequest != nil {
|
||||||
|
return errRequest
|
||||||
|
}
|
||||||
|
defer resp.Body.Close()
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func generateBody(ctx context.Context, info SignozLogPayload) []byte {
|
||||||
|
var (
|
||||||
|
timestamp = time.Now().Unix()
|
||||||
|
payload = logData{
|
||||||
|
SeverityNumber: info.SeverityLevel,
|
||||||
|
SeverityText: getSeverityLevelText(info.SeverityLevel),
|
||||||
|
Timestamp: timestamp,
|
||||||
|
Source: cfgSignoz.ServiceName,
|
||||||
|
Message: "",
|
||||||
|
}
|
||||||
|
)
|
||||||
|
body := map[string]interface{}{
|
||||||
|
"message": info.Message,
|
||||||
|
"level_number": info.SeverityLevel,
|
||||||
|
"level": getSeverityLevelText(info.SeverityLevel),
|
||||||
|
"request_id": "",
|
||||||
|
"data": info.Data,
|
||||||
|
}
|
||||||
|
rid := ctx.Value(CtxKeyRequestID)
|
||||||
|
if rid != nil {
|
||||||
|
body["request_id"] = rid.(string)
|
||||||
|
payload.TraceID = rid.(string)
|
||||||
|
payload.SpanID = rid.(string)
|
||||||
|
}
|
||||||
|
msg, _ := json.Marshal(body)
|
||||||
|
payload.Message = string(msg)
|
||||||
|
b, _ := json.Marshal(payload)
|
||||||
|
return b
|
||||||
|
}
|
||||||
|
|
||||||
|
func getSeverityLevelText(level int) string {
|
||||||
|
return MapStringSeverityLevel[level]
|
||||||
|
}
|
Loading…
Reference in New Issue