zl程序教程

您现在的位置是:首页 >  其它

当前栏目

一起来玩了下 InfluxDb 吧

起来 InfluxDB
2023-09-14 09:00:29 时间

之前有一个需求,运营需要能看到某某功能长连接在线人数是多少,比如发完 push 之后是多少,能够实时得到运营的反馈。

我比较懒,能用简单的办法搞定,就不喜欢习惯用开源的东西,因为觉得自己学习的也比较慢,但是不得不说这种快速上手一个陌生产品的能力很重要,我很缺乏这种能力。

我们提供一个长连接服务,占用端口8080,我最初的方式通过 shell 脚本做一个简单的监控,数据都直接写在了日志文件里。


while :; do sleep 1;netstat -lanp|grep 8080|grep ESTABLISHED|awk {print $5}|awk -F : {print $1}|sort|uniq|wc -l|awk BEGIN{a="$(date +%H:%M:%S)";}{printf "%s,%d\n",a,$1}   access_num.log;done

上面的命令输出两列,第一列是时间,第二列是在线人数。

然后以时间作为横坐标,在线人数作为纵坐标,绘制了下面的图表(前端用的百度的echarts)。

比较简陋,不过用起来我觉得还是蛮轻便的。

搭同事的车一起玩了下influxdb

同事说,你这个太 low 了,现在比较流行Grafana+telegraf+InfluxDb来搭建。

Grafana 负责 UI 界面的展示

telegraf 做数据的收集,比如服务器集群的性能监控

InfluxDb 是现在流行的时间序列数据库

我马上搜这些关键字,全是英文呢,可视化效果真不错,github star 也上千。怎么安装了就不说了,直接上官网就有。InfluxDb数据库的定义比较新颖,下面就说说它了。

InfluxDb数据库里series对应的是我们常规认识的表,而表里面的一行数据一般都来表示一个对象,而series里面一行数据则是描述的一个point。(没错,就是坐标系里的一个真实的点,所以这个数据库的业务场景就是专门针对这种时间线的数据监控而创作的。)

那么这个点有哪些属性来描述它呢?

timestamp,point的时间戳,

measurement,可以理解为表名,

field,以1~n个key-value来表示,point的值,

tags,以0~n个key-value来表示,point 的属性。

以一个具体的例子来说,现在需要监控1服务器的负载,那么负载(load)就是measurement,此刻的负载值,就是field,该服务器的 ip 就可以作为tags中的一个,也可以不记 ip,因为此时我们的需求只是记录一台服务器而已。

那么命令行如何插入一条数据呢?下面是其写入协议。适用于InfluxDb的命令行和 Api 接口

measurement [, tag-key = tag-value ...]  field-key = field-value [, field2-key = field2-value ...] [unix-nano-timestamp]

以你老司机多年的经验,一看上面的表达式便知,[]里面的内容表示可选,所以插入数据库的时候,可以不用带时间戳,默认为当前时间戳。

官方的例子送给大家


cpu,host=serverA,region=us_west value=0.64 payment,device=mobile,product=Notepad,method=credit billed=33,licenses=3i 1434067467100293230 stock,symbol=AAPL bid=127.46,ask=127.48 temperature,machine=unit42,type=assembly external=25,internal=37 1434067467000000000

nice,看到了么,还可以用在交易记录哟。

说了这么多,下面加快速度一条路,快上车,带你迅速解决战斗。

假设 InfluxDb 

bin 文件路径是:/usr/local/bin/influx

绑定的 ip:101.241.254.176 

授权账号:mengkang

密码:123456


# 插入一条 101.241.254.134 服务器 websocket 在线人数的数据,不需要创建表,直接插入 insert websocket,ip=101.241.254.134 num=100

那么数据怎么查询呢?这才是它的强大之处,不然就是数据库了。

比如官方的这个例子


SELECT MEAN("water_level") FROM "h2o_feet" WHERE time   now() - 2w GROUP BY "location",time(6h)

支持的查询语句 https://docs.influxdata.com/influxdb/v1.0/query_language/data_exploration/

在使用telegraf,感觉配置文件太复杂啦,我同事在用,我太笨了研究了半天玩不转。

而InfluxDb提供了 api 接口,我就直接通过shell往InfluxDb写数据了。


curl -i -XPOST -u username:password "http://101.241.254.176:8086/write?db=my_monitor" --data-binary websocket,host=10.24.254.134 value=120
一小时入门时序数据库 influxDB InfluxDB是一个由InfluxData开发的开源时序型数据。它由Go写成,着力于高性能地查询与存储时序型数据。InfluxDB被广泛应用于存储系统的监控数据,IoT行业的实时数据等场景。
InfluxDB Cluster - InfluxDB Enterprise 集群的开源替代方案 InfluxDB Cluster - 一个开源分布式时间序列数据库,InfluxDB Enterprise 集群的开源替代方案。完全依照 InfluxDB Enterprise 实现,基于 InfluxDB v1.8.10 开发,支持集群(数据分片)、高可用(容错)、数据一致性(Raft,Hinted Handoff)、配套工具(扩缩容、数据同步等)等特性,Telegraf、Chronograf、Kapacitor 也完全支持,生产环境已就绪
阿里云InfluxDB的正确使用姿势 阿里云InfluxDB介绍 阿里云InfluxDB®专注于处理高写入和查询负载的时序数据,用于存储大规模的时序数据并进行实时分析,包括来自DevOps监控、车联网、智慧交通、金融和IOT传感器数据采集,目前可以在阿里云官网开通购买基础版和高可用版实例。
阿里云InfluxDB®采集监控MySQL实践 阿里云InfluxDB®已经集成TIG(Telegraf/InfluxDB/Grafana)生态,正在开展首月一元购活动,广泛应用于DevOps监控、车联网、智慧交通、金融和IOT传感器数据采集等领域。
时序数据库为什么选 Prometheus Prometheus 与 Graphite Graphite 专注于成为一个具有查询语言和绘图功能的被动时间序列数据库。任何其他问题都由外部组件处理。 Prometheus 是一个完整的监控和趋势系统,包括内置和活动的抓取、存储、查询、绘图和基于时间序列数据的报警。
(七) DockerUI与Shipyard以及InfluxDB+cAdvisor+Grafana配置监控 一、DockerUI基于DockerAPI实现的镜像容器仓库管理 docker run -d -p 59000:9000 --privileged -v /var/run/docker.sock:/var/run/docker.sock uifd/ui-for-docker 三大优点:1:可以对运行着的容器进行批量操作2:在容器网络中-会显示容器与容器间的网络关系3:在Volumes中显示了所有挂载目录对我当前需求而言,好想dockerui 和 shipyard能和二为一呀。
Prometheus VS InfluxDB 除了传统的监控系统如 Nagios,Zabbix,Sensu 以外,基于时间序列数据库的监控系统随着微服务的兴起越来越受欢迎,比如 Prometheus,比如 InfluxDB。gtt 也尝试了一下这两个系统,希望能找到两者的差别,为以后选型提供一些帮助。
周梦康 十年前从 LNMP 开始个人站长 mengkang.net 生涯。 分享各种线上故障复盘笔记,关注我,防止采坑。