Falcon 存储优化: 高性能内存 TSDB 的诞生

TSDB

先说 TSDB(时序数据库)是什么,下面的定义引用自 Wikipedia

A time series database (TSDB) is a software system that is optimized for handling time series data, arrays of numbers indexed by time (a datetime or a datetime range).

InfluxdbGraphiteRRDtoolOpenTSDB等都是当下流行的TSDB实现。

TSDB 多应用于监控系统等场景。

Falcon存储做过的那些优化

我司监控系统的底层存储架构使用的是 open-falcon,作为非常流行的中小企业监控解决方案,open-falcon非常优秀。

但在我司,指标量一度达到3亿+,且受限于成本等原因。falcon的存储组件就暴露出了一些性能问题。

本文从一个开发者的角度,阐述自本人接手以来对 graph(open-falcon的存储组件) 做过的一些优化工作,欢迎各位指正。

监控系统构建实践之传输篇

在上一篇文章采集篇的事情做完后,源数据就已经有了,但应该如何上报到存储就是接下来要考虑到的事情。
本文结合我司在传输链路的建设,简述一下期间的一点思考。

计算进程的CPU占用率

基于/proc/[pid]/stat和/proc/stat计算指定进程的cpu利用率

#!/bin/sh

corenum=$(nproc --all)
p=xxx
pid=$(pidof $p)
p_totaltime1=$(awk '{print $14+$15}' /proc/${pid}/stat)
totaltime1=$(awk '{if($1=="cpu"){for(i=2;i<=NF;i++){sum+=$i}}}END{print sum}' /proc/stat)
sleep 3 # 为什么是3, 要得到与top相同的结果
p_totaltime2=$(awk '{print $14+$15}' /proc/${pid}/stat)
totaltime2=$(awk '{if($1=="cpu"){for(i=2;i<=NF;i++){sum+=$i}}}END{print sum}' /proc/stat)

res=$(awk 'BEGIN{print '"($p_totaltime2-$p_totaltime1)*100/($totaltime2-$totaltime1)*$corenum"'}')

echo $res

监控系统构建实践-采集篇

写在前面

监控系统这个话题很大。
但一个基本的监控系统归纳起来,无非也就是数据采集、传输、存储、查询这么几个部分。
本文尝试从宏观上分析这几个模块在实践上遇到的一些问题,在我司的最佳实践解法,及本人对各个模块在实践中的一些思考。