这是 rrdcached 命令,可以使用我们的多个免费在线工作站之一在 OnWorks 免费托管服务提供商中运行,例如 Ubuntu Online、Fedora Online、Windows 在线模拟器或 MAC OS 在线模拟器
程序:
您的姓名
rrdcached - rrdtool 的数据缓存守护进程
概要
缓存 [-a 分配大小[-b 基目录 [-B]][-F[-f 超时[-G 组]][-g]
[-j 日志目录[-L[-l 地址[-m 模式[-O[-P 权限[-p pid_文件[-R]
[-s 组[-t 写线程[-U 用户]][-w 超时[-z 延迟]
商品描述
缓存 是一个守护进程,它接收对现有 RRD 文件的更新,累积它们,
如果已收到足够的信息或已过定义的时间,则将更新写入 RRD
文件。 一种 红晕 命令可用于强制将值写入磁盘,以便绘图
设施和类似设施可以使用最新数据。
守护进程的编写考虑了大设置。 这些设置通常会遇到与 IO 相关的问题
由于超出本文档范围的原因迟早会出现问题。 检查
有关详细信息,请参阅 RRDtool 主页上的 wiki。 还要检查下面的“安全注意事项”
在使用这个守护进程之前! 可以找到守护进程如何运行的详细描述
在下面的“它是如何工作的”部分中。
配置
-l 地址
告诉守护进程绑定到 地址 并接受传入的 TCP 连接
插座。 如果 地址 以“unix:”开头,该前缀后面的所有内容都是
解释为 UNIX 域套接字的路径。 否则地址或节点名称
使用“getaddrinfo()”解决。
对于网络套接字,可以使用“[地址]:港口 ”。 如果
地址是 IPv4 地址或完全限定的域名(即地址
包含至少一个点(“.”)),方括号可以省略,导致
(更简单)”地址:港口 ” 图案。 默认端口是 42217. 如果指定网络
套接字,必须阅读“安全考虑”部分。
接受以下格式。 请注意 UNIX 域的地址
插座 必须 在第二种情况下以斜线开头!
Unix:
/
[ ]:
:
给定一个没有主机的端口(例如“-l :42217”),守护进程将在该端口上监听
所有网络接口。 如果出现以下情况,请使用“-L”以避免需要显式提供端口
需要默认端口。
如果不 -l 选项未指定默认地址,“unix:/tmp/rrdcached.sock”,将
使用。 多种的 -l 可以提供选项。
-L 告诉守护程序绑定到所有可用接口上的默认 TCP 端口。 这是
等效于“-l ''”而不会混淆空字符串参数。
-s 团队名字|GID
设置 UNIX 域套接字的组权限。 该选项接受数字
组 ID 或组名称。 然后该组将同时拥有读取和写入权限(
套接字将具有套接字的文件权限 0760),因此能够发送
守护进程的命令。 这在您无法轻松运行所有内容的情况下可能很有用
RRD 进程具有相同的用户权限(例如生成 CGI 脚本的图形
通常在 Web 服务器的权限上下文中运行)。
此选项会影响 以下 UNIX 套接字地址(以下 -l 选项)或
默认套接字(如果没有 -l 选项已指定),即您可以指定
不同插座的不同设置。
默认情况下不更改套接字的所有权或权限,因此,使用
系统默认。
-m 模式
设置 UNIX 域套接字的文件权限。 该选项接受八进制数
表示模式的位模式(见 CHMOD(1) 详情)。
请注意,并非所有系统都遵守此设置。 在 Linux 上,读/写权限
需要连接到 UNIX 套接字。 然而,许多 BSD 派生的系统忽略了
UNIX 套接字的权限。 看 UNIX(7) 详情。
此选项会影响 以下 UNIX 套接字地址(以下 -l 选项)或
默认套接字(如果没有 -l 选项已指定),即您可以指定
不同插座的不同设置。
默认情况下不更改套接字的所有权或权限,因此,使用
系统默认。
-P 命令[,命令[,...]]
指定通过网络和 UNIX 套接字接受的命令。 这允许
管理员 RRD缓存D 控制从各种来源接受的动作。
给出的论据 -P option 是逗号分隔的命令列表。 为了
例如,要允许“FLUSH”和“PENDING”命令,可以指定:
rrdcached -P FLUSH,挂起 $MORE_ARGUMENTS
这个 -P 选项影响 以下 套接字地址(以下 -l 选项)或
默认套接字(如果没有 -l 选项已指定)。 在以下示例中,仅
IPv4 网络套接字(地址 10.0.0.1)将被限制为“FLUSH”和
“待定”命令:
rrdcached -l unix:/some/path -P FLUSH,PENDING -l 10.0.0.1
可以在“有效命令”部分找到可用命令的完整列表
以下。 有两个小的特殊例外:
· 始终允许使用“HELP”和“QUIT”命令。
· 如果“BATCH”命令被接受,则 . 命令将自动被接受,
了。
另请阅读下面的“安全注意事项”。
-w 超时
数据每次写入磁盘 超时 秒。 可以使用可选的后缀(例如
“5m”而不是 300 秒)。 如果未指定此选项,则默认间隔为
将使用 300 秒。
-z 延迟
如果指定,rrdcached 会将每个 RRD 的写入延迟随机数秒
在 [0,延迟)。 这将避免同时排队的太多写入。
此值不应大于中指定的值 -w. 可选的后缀
可以使用(例如“3m”而不是 180 秒)。 默认情况下,没有延迟。
-f 超时
所有的 超时 秒搜索整个缓存以查找写入的旧值
盘。 这仅涉及更新已停止的文件,因此将其设置为
大多数情况下可以接受高值,例如 3600 秒。 一个可选的后缀可能
使用(例如“1h”而不是 3600 秒)。 此超时默认为 3600 秒。
-p 文件
设置 PID 文件的名称和位置。 如果没有指定,默认,
"$localstatedir/run/rrdcached.pid" 将被使用。
-t 写线程
指定用于写入 RRD 文件的线程数。 默认值为 4。
增加这个数字将允许 rrdcached 有更多的并发 I/O 请求
进入内核。 这可能允许内核重新排序磁盘写入,导致
更好的磁盘吞吐量。
-j DIR
将更新写入日志 DIR. 在程序或系统崩溃的情况下,这
将允许守护程序写入崩溃时挂起的任何更新。
启动时,守护程序将检查此目录中的日志文件。 如果找到,所有
在守护进程开始接受新的之前,其中的更新将被读入内存
连接。
日志将以与给定的刷新计时器相同的频率旋转 -f.
启用日记功能后,守护程序将使用快速关闭程序。 相当
与将所有文件刷新到磁盘相比,它将确保正确写入日志并
立即退出。 尽管 RRD 数据文件不是完全最新的,但没有
信息丢失; 所有待定的更新将在下次从日志中重播
守护进程启动。
要禁用快速关机,请使用 -F 选项。
-F 当守护进程关闭时,总是刷新 RRD 数据文件的所有更新,
无论日记设置如何。
-g 在前台运行。 守护进程不会 叉子().
-b DIR
守护程序将在启动时更改为特定目录。 所有文件传递给
守护进程,由 a 指定 相对的 路径,将被解释为相对于
这个目录。 如果没有给出默认值,“/ tmp目录“, 将会被使用。
+------------------------+------------------------ +
! 命令行 ! 文件已更新!
+------------------------+------------------------ +
! foo.rrd ! /tmp/foo.rrd !
! foo/bar.rrd ! /tmp/foo/bar.rrd !
! /var/lib/rrd/foo.rrd ! /var/lib/rrd/foo.rrd !
+------------------------+------------------------ +
命令行给出的路径和实际路径
由守护进程更新,假设基目录
"/ tmp目录".
警告: 直到并包括基本目录的路径 必须 不是 BE 符号链接。
换句话说,如果基目录被指定为:
-b /base/dir/某处
... 然后 没有 以下应该是符号链接:
/根据
/基地/目录
/基地/目录/某处
-B 只允许写入指定的基本目录 -b (和任何子目录)。
这确实 不是 检测符号链接。 包含“../”的路径也将被阻止。
-R 允许在指定的基本目录中递归创建子目录 -b (和任何
子目录)。 只能在以下情况下使用 -B 也设置了。
-a 分配大小
以块为单位分配值指针 分配大小. 这可能会提高 CPU 利用率
具有缓慢“realloc()”实现的机器,以换取稍高的内存
利用率。 默认为 1。不要设置超过 -w 值除以
您的平均 RRD 步长。
-O 防止 CREATE 命令覆盖现有文件,即使有指示
这样做。 这是为了增加安全性。
-G -组
当作为守护程序运行并从特权帐户调用时,重置组权限
对那些 组. 可以将组指定为名称或组 ID。 守护进程
如果无法成功转换到指定的状态,将退出并进行诊断
组。
-U -用户
当作为守护程序运行并从特权帐户调用时,将用户权限重置为
那些 用户. 可以将用户指定为名称或用户 ID。 守护进程将
如果无法成功转换到指定用户,则退出诊断。
受影响的 RRD工具 指令
以下命令可能会被告知 缓存 使用命令行参数
--守护进程 或环境变量 RRDCACHED_ADDRESS:
· 倾倒
· 拿来
· 冲洗
· 图
· 图形
· 信息
· 第一的
· 最后的
· 最后更新
· 更新
· 端口
· 创建
这个 更新 命令可以将值发送到守护程序而不是将它们写入磁盘
本身。 所有其他命令都可以发送 冲洗 命令(见下文)到守护进程之前
访问文件,因此即使缓存超时很大,它们也可以使用最新数据。
ERROR REPORTING
守护程序以两种方式之一报告错误: 在启动期间,打印错误消息
到“STDERR”。 启动时的步骤之一是fork到后台并关闭
“STDERR” - 在此之后直接写入用户不再可能。 一旦这有
发生时,守护程序将使用以下命令将日志消息发送到系统日志记录守护程序 系统日志(3)。
使用的工具是“LOG_DAEMON”。
如何 IT 工作
收到更新时, 缓存 不写入磁盘,但会为此查找条目
文件在其内部树中。 如果未找到,则创建一个包含当前时间的条目
(在下图中称为“第一”)。 这次是 而不去 命令中指定的时间
行,但操作系统认为是“现在”的时间。 价值和时间
值(在下图中称为“时间”)附加到树节点。
将值附加到树节点时,会检查是否需要写入值
到磁盘。 如果“now() - First >= timeout”,则将值写入磁盘,其中“timeout”是
使用指定的超时时间 -w 选项,请参阅“选项”。 如果这些值“足够旧”,它们
将被排入“更新队列”,i。 e. 它们将被附加到链表
如下所示。 因为树节点和链表的元素是同一个数据
内存中的结构,对已经入队的文件的任何更新都将被写入
下一次写入 RRD 文件也是如此。
一个单独的“更新线程”不断地将更新队列中的第一个元素出列并
将其所有值写入适当的文件。 所以只要更新队列不为空
文件以尽可能高的速率写入。
由于仅在将新值添加到文件时才检查文件超时,“死”
文件,我。 e. 不再更新的文件将永远不会写入磁盘。
因此,时不时地,由控制 -f 选项,整棵树都被步行,并且
所有“旧”值都排入队列。 因为这只会影响“死”文件和遍历树
相对昂贵,您应该将“刷新间隔”设置为合理的高值。
默认值为 3600 秒(一小时)。
缓存值的缺点是它们不会显示在从
RRD 文件。 为了解决这个问题,守护进程提供了“刷新命令”来刷新特定的
文件。 这意味着文件被插入到 头 更新队列或移动到那里
如果它已经入队。 刷新命令仅在文件挂起后才会返回
更新已写入磁盘。
+--------+ +------+ +------+
! 头 ! ! 根 ! ! 尾巴 !
+---+--+ +---+--+ +---+--+
! /\ !
! / \ !
! /\ /\ !
! /\/\ \ `----------------- ... --------, !
V /`-------,! 伏
+---+----+---+ +-----+-----+ +---+----+---+
! 文件:富! ! 文件:酒吧! ! 文件:qux!
! 第一个:101! ! 第一:119! ! 第一:180!
! 下一个:&bar -+--->! 下一个:&... -+---> ... --->! 下一个:空!
| 上一个:NULL !<---+-上一个:&foo !<--- ... ----+-上一个: &... !
+============+ +=============+ +============+
! 时间:100! ! 时间:120! ! 时间:180!
! 价值:10! ! 价值:0.1! ! 值:2,2!
+------------+ +------------+ +------------+
! 时间:110! ! 时间:130! ! 时间:190!
! 价值:26! ! 价值:0.1! ! 值:7,3!
+------------+ +------------+ +------------+
::::::
+------------+ +------------+ +------------+
! 时间:230! ! 时间:250! ! 时间:310!
! 价值:42! ! 价值:0.2! ! 值:1,2!
+------------+ +------------+ +------------+
上图说明:
· 文件/值存储在(平衡的)树中。
· 更新队列中的树节点和条目是相同的数据结构。
· 本地时间(“First”)和更新中指定的时间(“Time”)可能不同。
· 在“尾部”插入超时值。
· 显式刷新的值插入“头部”。
· ASCII 艺术摇滚。
保安 注意事项
认证
如果您的 rrdtool 安装是在没有 libwrap 的情况下构建的,则没有任何形式的身份验证
对于连接到 rrdcache 守护进程的客户端!
如果您的 rrdtool 安装是使用 libwrap 构建的,那么您可以使用 hosts_access
限制客户端对 rrdcache 守护进程 (rrdcached) 的访问。 有关如何操作的更多信息
使用 hosts_access 限制对 rrdcache 守护进程的访问,您应该阅读
主机访问(5) 手册页。
仍然强烈建议安装数据包过滤器或类似机制以防止
未经授权的连接。 除非您有专用的 VLAN 或 VPN,否则使用网络
sockets 可能是个坏主意!
授权
每个套接字的授权最少。
目前授权是基于每个套接字完成的。 这意味着每个套接字都有一个列表
它将接受并将接受的命令。 它只会接受那些命令
明确列出,但它会(当前)接受来自任何人的这些命令
插座。
如果要使用网络套接字,则必须限制接受的
外部客户端所需的命令。 例如,如果外部客户想要
绘制缓存数据的图形,他们应该只允许使用“FLUSH”命令。
当 rrcached 由 systemd 套接字激活时,授权不起作用。
加密
没有加密。
同样,这可能会在未来添加,但目前你的工作是保持你的
私有数据私有。 如果您的统计数据是,请安装 VPN 或加密隧道
机密的!
明智 检查
没有健全性检查。
守护进程会盲目地写入它被告知的任何文件,所以你真的应该创建一个
仅用于此守护程序的单独用户。 它也不做任何健全性检查,所以如果它得到
被告知在很远的将来写值,你的文件会被搞砸的好!
结语
· 安全是管理员的工作。
· 我们建议只允许通过 UNIX 域套接字进行写访问。
· 你被警告了。
外交协定
守护进程使用基于行的 ASCII 协议与客户端通信,该协议很容易
阅读和易于打字。 这使得脚本很容易实现协议和
用户可以使用 telnet 连接到守护程序并“手动”测试内容。
该协议是基于行的,这意味着每条记录由一行或多行组成。 一种
行以换行符 0x0A 结束,通常写成“\n”。 在里面
下面的例子,这个字符将被写成“ “(“换行”)。
建立连接后,客户端应该发送一个“命令”。 一种
command 由 command 关键字、可能有一些参数和一个终止符组成
换行符。 有关命令列表,请参阅下面的“有效命令”。
计费示例:
刷新/tmp/foo.rrd
守护进程用一行包含状态代码和短状态消息的行来回答,
由一个或多个空格字符分隔。 负状态代码表示错误,
正状态代码或零信号成功。 如果状态码大于零,则
指示状态行之后的行数。
例子:
0 成功
2 跟随两行
这是第一行
这是第二行
有效 命令
守护进程可以理解以下命令:
冲洗 文件名
导致守护进程放置 文件名 以及 头 更新队列的(可能移动它
如果节点已经入队,则在那里)。 答案将被发送 after 该节点有
已出列。
冲洗
使守护程序开始将所有挂起的值刷新到磁盘。 这返回
立即,即使写入可能需要很长时间。
待处理 文件名
按顺序显示文件的所有“待处理”更新。 显示的更新尚未
写入底层 RRD 文件。
取 文件名 CF [开始 [ end[ds ...]]]
使用指定的参数调用“rrd_fetch”并以文本形式返回结果。 如果
必要时,首先将文件刷新到磁盘。 客户端函数“rrdc_fetch”
(在“rrd_client.h”中声明)解析输出并且行为就像“rrd_fetch_r”一样
轻松集成远程查询。 ds 定义要转储的列 - 如果没有
给定然后全部返回
取件箱 文件名 CF [开始 [ end[ds ...]]]
使用指定的参数调用“rrd_fetch”并以文本/二进制形式返回结果
避免不必要的解组/编组开销。 如有必要,刷新文件
先到磁盘。 客户端函数“rrdc_fetch”(在“rrd_client.h”中声明)
解析输出并表现得像“rrd_fetch_r”,以便于远程集成
查询。 ds 定义要转储的列 - 如果没有给出,则返回所有列
忘记 文件名
删除 文件名 从缓存中。 任何待定的更新 WILL BE LOST.
队列
显示输出队列中的文件。 返回零个或多个行
以下格式,其中是要写入的值的数量
:
帮助 [命令]
返回一个简短的使用消息。 如果没有给出命令,或者 命令 is 帮助, 的列表
返回守护进程支持的命令。 否则是简短的描述,可能
包含指向手册页的指针,返回。 显然,这是为了
交互式用法以及命令和用法摘要的格式
返回的定义不明确。
统计资料
返回可用于衡量守护进程性能和
检查其状态。 有关返回值的说明,请参阅“性能值”
联络一位教师
返回值的格式类似于许多其他基于行的格式
协议:每个值都打印在单独的行上,每个值都包含
值、冒号、一个或多个空格和实际值。
计费示例:
9 统计如下
队列长度:0
收到的更新:30
收到的冲洗次数:2
更新已写:13
写入的数据集:390
树节点数:13
树深:4
日志字节数:190
日志轮换:0
中国平安
PING-PONG,这在用户客户端和客户端之间使用连接池时非常有用
RRD缓存。
计费示例:
0 乒乓球
更新 文件名 价值观 [价值观 ...]
向文件名添加更多数据。 这是 这些因素包括原料奶的可用性以及达到必要粉末质量水平所需的工艺。 守护进程的设计目的,所以
没有必要再次描述该机制。 阅读上面的“它是如何工作的”以了解
详细解释。
请注意, rrdcached 只接受更新值中的绝对时间戳。 更新
像 "N:1:2:3" 这样的字符串会被 RRD 客户端自动转换为绝对时间
发送到 rrdcached 之前的库。
写 文件名
此命令在文件成功写出后写入日志
盘。 在日志重放期间使用它来确定哪些更新已经
应用。 这是 仅由 在期刊中有效; 它不被其他命令接受
通道。
第一 文件名 [资源]
返回指定 RRA 中第一个 CDP 的时间戳。 默认是使用 RRA
如果没有指定则为零。
LAST 文件名
将上次更新的时间戳返回到指定的 RRD。 注意缓存是
而不去 在检查之前刷新,因为客户端应该单独请求,如果
这是必需的。
信息 文件名
返回指定 RRD 的配置信息。 注意缓存是 而不去
在检查之前刷新,因为客户端应该单独请求它,如果它是
必需的。
返回信息,每行一项,格式为:
一世一世一世
CREATE 文件名 [-S. 一步的大小] [-b 开始时间] [-O] DS定义 ... RRA定义 ...
这将根据提供的参数创建 RRD 文件,前提是
参数有效,并且(如果给出了 -O 选项或者 rrdcached 已启动
带有 -O 标志)指定的 文件名 不存在。
批量
此命令启动多个命令的批量加载。 这是专为
具有极高更新率的安装,因为它允许多个命令
按发行 读() 和 写().
所有命令都按照单独给出的方式执行,除了
输出给用户。 指示成功的消息被抑制,错误消息
延迟到客户端完成。
当客户端在自己的行上发送一个点(“.”)时,命令处理完成。
客户端完成后,服务器以错误计数和错误列表作为响应
错误消息(如果有)。 每个错误消息都指示要执行的命令的编号
它对应于哪个,以及错误消息本身。 之后的第一个用户命令
批量 是第一号命令。
客户:批量
服务器:0 继续。 以点“.”结尾在自己的线上。
客户端:更新 x.rrd 1223661439:1:2:3 <--- 命令 #1
客户端:更新 y.rrd 1223661440:3:4:5 <--- 命令 #2
客户:等等……
客户: 。
服务器:2 错误
服务器:命令 1 的 1 条消息
服务器:命令 12 的 12 条消息
放弃
断开与 rrdcached 的连接。
性能 理念
以下计数器由 统计资料 命令:
队列长度 (未签名 64bit 整数)
当前在更新队列中排队的节点数。
收到更新 (未签名 64bit 整数)
收到的 UPDATE 命令数。
接收到的刷新数 (未签名 64bit 整数)
收到的 FLUSH 命令的数量。
更新已写 (未签名 64bit 整数)
更新总数,i。 e. 调用“rrd_update_r”,因为守护进程已经启动。
写入的数据集 (未签名 64bit 整数)
自守护程序启动以来写入磁盘的“数据集”总数。 一个数据集
是一个或多个传递给 更新 命令。 例如:“1223661439:123:456”
是一个具有两个值的数据集。 术语“数据集”用于防止混淆
是否计算单个值或值组。
树节点数 (未签名 64bit 整数)
缓存中的节点数。
树深 (未签名 64bit 整数)
用于快速键查找的树的深度。
日志字节 (未签名 64bit 整数)
自启动以来写入日志的总字节数。
期刊旋转 (未签名 64bit 整数)
日志自启动以来轮换的次数。
讯号
SIGINT 和 SIGTERM
守护进程在收到这些信号中的任何一个时正常退出。 待定更新是
按照规定处理 -j 和 -F 选项。
信号灯1
守护进程在将所有更新刷新到磁盘后退出。 可能还要等一下。
信号灯2
守护进程立即退出,而不会将更新刷新到磁盘。 待更新
当守护进程再次启动时,将从日志中重播。 警告: if
日记 (-j) is 不是 启用, 任何 有待 更新 WILL BE LOST.
使用 onworks.net 服务在线使用 rrdcached