LogCollector03: influxDB

influxDB

好处:每隔五秒收集一次上章几个维度的数据,放在mysql里非常占数据,且io查询相当慢。需要一种按时间来索引的时序数据库,它按时间存储。
InfluxDB是一个开源分布式时序、事件和指标数据库。使用Go语言编写,无需外部依赖。其设计目标是实现分布式和水平伸缩扩展。

安装
下载
https://portal.influxdata.com/downloads/】

Mac和Linux用户可以点击https://v2.docs.influxdata.com/v2.0/get-started/下载。

或者:

brew update
brew install influxdb
ln -sfv /usr/local/opt/influxdb/*.plist ~/Library/LaunchAgents

配置文件在/etc/influxdb/influxdb.conf ,如果没有就将/usr/local/etc/influxdb.conf 拷一个过去。默认存储路径:dir = “/usr/local/var/influxdb/meta”。我修改为了/Users/mac/go/influxdb
配置缓存:cache-max-memory-size

#启动服务
launchctl load ~/Library/LaunchAgents/homebrew.mxcl.influxdb.plist

#停止服务
launchctl unload ~/Library/LaunchAgents/homebrew.mxcl.influxdb.plist

#前台启动
influxd -config /usr/local/etc/influxdb.conf

查看influxdb运行配置
influxd config

influxDB介绍

名词介绍
influxDB名词对应传统数据库概念

database:数据库
measurement:数据表
point:数据行
influxDB中的point相当于传统数据库里的一行数据,由时间戳(time)、数据(field)、标签(tag)组成。

Point属性对应传统数据库概念
time:每个数据记录时间,是数据库中的主索引
field:各种记录值(没有索引的属性),例如温度、湿度
tags:各种有索引的属性,例如地区、海拔
Series相当于是 InfluxDB 中一些数据的集合,在同一个 database 中,retention policy、measurement、tag sets 完全相同的数据同属于一个 series,同一个 series 的数据在物理上会按照时间顺序排列存储在一起。

Go操作influxDB
安装
influxDB 1.x版本
go get github.com/influxdata/influxdb1-client/v2
influxDB 2.x版本
go get github.com/influxdata/influxdb-client-go

基本使用

package main

import (
	"fmt"
	"log"
	"time"

	client "github.com/influxdata/influxdb1-client/v2"
)

// influxdb demo

func connInflux() client.Client {
	cli, err := client.NewHTTPClient(client.HTTPConfig{
		Addr:     "http://127.0.0.1:8086",
		Username: "admin",
		Password: "",
	})
	if err != nil {
		log.Fatal(err)
	}
	return cli
}

// query
func queryDB(cli client.Client, cmd string) (res []client.Result, err error) {
	q := client.Query{
		Command:  cmd,
		Database: "test",
	}
	if response, err := cli.Query(q); err == nil {
		if response.Error() != nil {
			return res, response.Error()
		}
		res = response.Results
	} else {
		return res, err
	}
	return res, nil
}

// insert
func writesPoints(cli client.Client) {
	bp, err := client.NewBatchPoints(client.BatchPointsConfig{
		Database:  "test",
		Precision: "s", //精度,默认ns
	})
	if err != nil {
		log.Fatal(err)
	}
	tags := map[string]string{"cpu": "ih-cpu"}
	fields := map[string]interface{}{
		"idle":   201.1,
		"system": 43.3,
		"user":   86.6,
	}

	pt, err := client.NewPoint("cpu_usage", tags, fields, time.Now())
	if err != nil {
		log.Fatal(err)
	}
	bp.AddPoint(pt)
	err = cli.Write(bp)
	if err != nil {
		log.Fatal(err)
	}
	log.Println("insert success")
}

func main() {
	conn := connInflux()
	fmt.Println(conn)

	// insert
	writesPoints(conn)

	// 获取10条数据并展示
	qs := fmt.Sprintf("SELECT * FROM %s LIMIT %d", "cpu_usage", 10)
	res, err := queryDB(conn, qs)
	if err != nil {
		log.Fatal(err)
	}

	for _, row := range res[0].Series[0].Values {
		for j, value := range row {
			log.Printf("j:%d value:%v\n", j, value)
		}
	}
}

参考:https://blog.csdn.net/qiaojialin/article/details/78834880

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
下面是一个简单的LogCollector的功能模块图,按照数据流向划分为三个模块:输入模块、处理模块和输出模块。 ``` 输入模块 处理模块 输出模块 +---------------+ +---------------+ +---------------+ | 本地系统日志 | | 日志解析和标准化 | | 统一的日志格式 | +---------------+ +---------------+ +---------------+ | 远程系统日志 | | 日志过滤和分类 | | 日志收集和分析 | +---------------+ +---------------+ +---------------+ | 应用程序日志 | | 实时告警和通知 | | 实时告警和通知 | +---------------+ +---------------+ +---------------+ | 网络设备日志 | | 可视化报告和分析 | | 可视化报告和分析 | +---------------+ +---------------+ +---------------+ | Windows事件日志| | | | | +---------------+ | | | | | Syslog日志 | | | | | +---------------+ | | | | | 其他格式的日志文件| | | | | +---------------+ +---------------+ +---------------+ ``` 输入输出格式如下: - 本地系统日志、远程系统日志、应用程序日志、网络设备日志:各种厂商自定义格式的日志文件。 - Windows事件日志:Windows系统自带的事件日志格式。 - Syslog日志:RFC 5424标准的Syslog协议格式。 - 其他格式的日志文件:各种自定义格式的日志文件。 - 统一的日志格式:经过LogCollector解析和标准化后的统一日志格式,包括时间戳、事件类型、事件来源、事件级别、事件描述等字段。 - 日志收集和分析:经过LogCollector处理后的原始和统计日志数据,可以存储在数据库、文件系统或其他存储介质中。 - 实时告警和通知:告警和通知消息的格式可以根据用户需求进行定制。 - 可视化报告和分析:报告和分析结果可以以各种图表、表格等形式呈现,格式可以根据用户需求进行定制。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值