实现日志收集功能
This commit is contained in:
@@ -228,6 +228,29 @@ func (s *Storage) WriteDiskDetailMetric(ctx context.Context, deviceID, diskDevic
|
||||
return s.writeData(ctx, "disk_details", allTags, fields, deviceID, "disk_detail")
|
||||
}
|
||||
|
||||
// WriteLogMetric 写入日志指标
|
||||
func (s *Storage) WriteLogMetric(ctx context.Context, deviceID string, sequence int, source string, time time.Time, message string, tags map[string]string) error {
|
||||
// 创建标签映射,合并原有标签和新标签
|
||||
allTags := make(map[string]string)
|
||||
// 复制原有标签
|
||||
for k, v := range tags {
|
||||
allTags[k] = v
|
||||
}
|
||||
// 添加设备ID标签
|
||||
allTags["device_id"] = deviceID
|
||||
// 添加日志来源标签
|
||||
allTags["source"] = source
|
||||
|
||||
// 创建字段映射
|
||||
fields := map[string]interface{}{
|
||||
"sequence": sequence,
|
||||
"message": message,
|
||||
}
|
||||
|
||||
// 使用新的writeData方法
|
||||
return s.writeData(ctx, "logs", allTags, fields, deviceID, "log")
|
||||
}
|
||||
|
||||
// QueryMetrics 查询监控指标
|
||||
func (s *Storage) QueryMetrics(ctx context.Context, deviceID, metricType, startTime, endTime string) ([]MetricPoint, error) {
|
||||
queryAPI := s.client.QueryAPI(s.org)
|
||||
@@ -526,6 +549,67 @@ func (s *Storage) QueryProcessMetrics(ctx context.Context, deviceID string, star
|
||||
return processes, nil
|
||||
}
|
||||
|
||||
// QueryLogMetrics 查询日志指标
|
||||
func (s *Storage) QueryLogMetrics(ctx context.Context, deviceID string, startTime, endTime string) ([]map[string]interface{}, error) {
|
||||
queryAPI := s.client.QueryAPI(s.org)
|
||||
|
||||
// 构建查询语句
|
||||
query := `from(bucket: "` + s.bucket + `")
|
||||
|> range(start: ` + startTime + `, stop: ` + endTime + `)
|
||||
|> filter(fn: (r) => r["_measurement"] == "logs")`
|
||||
|
||||
// 如果指定了设备ID,添加设备ID过滤
|
||||
if deviceID != "" {
|
||||
query += `
|
||||
|> filter(fn: (r) => r["device_id"] == "` + deviceID + `")`
|
||||
}
|
||||
|
||||
// 按时间倒序排列,获取最新的日志
|
||||
query += `
|
||||
|> sort(columns: ["_time"], desc: true)
|
||||
|> limit(n: 100)` // 限制返回100条最新日志
|
||||
|
||||
// 执行查询
|
||||
queryResult, err := queryAPI.Query(ctx, query)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer queryResult.Close()
|
||||
|
||||
// 存储日志数据
|
||||
logs := make([]map[string]interface{}, 0)
|
||||
|
||||
// 处理查询结果
|
||||
for queryResult.Next() {
|
||||
if queryResult.TableChanged() {
|
||||
// 表结构变化,跳过
|
||||
continue
|
||||
}
|
||||
|
||||
// 获取记录
|
||||
record := queryResult.Record()
|
||||
|
||||
// 构建日志数据
|
||||
logData := map[string]interface{}{
|
||||
"time": record.Time(),
|
||||
"device_id": record.ValueByKey("device_id"),
|
||||
"source": record.ValueByKey("source"),
|
||||
"sequence": record.ValueByKey("sequence"),
|
||||
"message": record.ValueByKey("message"),
|
||||
"agent_name": record.ValueByKey("agent_name"),
|
||||
}
|
||||
|
||||
// 添加到日志列表
|
||||
logs = append(logs, logData)
|
||||
}
|
||||
|
||||
if queryResult.Err() != nil {
|
||||
return nil, queryResult.Err()
|
||||
}
|
||||
|
||||
return logs, nil
|
||||
}
|
||||
|
||||
// QueryDiskDetails 查询磁盘详细信息
|
||||
func (s *Storage) QueryDiskDetails(ctx context.Context, deviceID string, startTime, endTime string) ([]map[string]interface{}, error) {
|
||||
queryAPI := s.client.QueryAPI(s.org)
|
||||
|
||||
Reference in New Issue
Block a user