开启 Syslog
作者:David G. Simmons / 产品,开发者
2018年6月27日
导航至
如果您一直关注发布公告,您会读过关于 InfluxData 堆栈中新增的“以指标为核心”的日志分析。但知道它的存在和使用它是两件完全不同的事情,所以我将介绍一些基本步骤,以帮助您的Telegraf实例将syslog数据拉入 InfluxDB。到目前为止,我已在 Mac OS 和嵌入式 Linux 上成功实现,所以我认为在通用 Linux 上实现的方式将类似。
如果您想了解关于在社区网站上使该功能正常工作的讨论,请访问此处,或者继续阅读。
MAC OS X
首先,我将介绍 Mac 指令,因为我每天都会运行 Mac OS。如果您正在运行 Linux,请跳转到Linux 指令。以下是所需条件
安装所需条件
- HomeBrew已安装
- 通过 HomeBrew 安装 rsyslog
相当直接。因此,让我们先安装 HomeBrew。在终端窗口中,输入以下命令
$ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
这会安装它。看这是多简单?接下来,我们将使用 HomeBrew 来安装 rsyslog。是的,Mac OS 内置了 syslog,但随着 Mac OS 更严格的安全措施的推出,使 syslog 正常工作变得困难,安装 rsyslog 更容易且更直接。因此,在同一个终端窗口中,运行
$ brew install rsyslog
现在 rsyslog 已经安装!接下来进行配置。
配置 rsyslog
HomeBrew 将东西安装到/usr/local
,配置文件通常放入/usr/local/etc
-基本上,HomeBrew 会将“usr/local”添加到其他 UNIX 味道中正常安装的位置。因此,我们的配置文件将是/usr/local/etc/rsyslog.conf
。我们需要以超级用户权限编辑它,因此如果您像我一样喜欢 vi,则$ sudo vi /usr/local/etc/rsyslog.conf
将起到作用。以下是您需要添加到该文件中的内容
$WorkDirectory /tmp/rsyslog # temporary directory for storing data
$ActionQueueType LinkedList # use asynchronous processing
$ActionQueueFileName srvrfwd # set file name, also enables disk mode
$ActionResumeRetryCount -1 # infinite retries on insert failure
$ActionQueueSaveOnShutdown on # save in-memory data if rsyslog shuts down
$ModLoad imudp #loads the udp module
#listen for messages on udp localhost:514 $UDPServerAddress localhost $UDPServerRun 514 *.*
@@(o)127.0.0.1:6514;RSYSLOG_SyslogProtocol23Format
您需要重新启动 rsyslog,因此请在终端中运行
$ sudo brew services restart rsyslog
现在您的 rsyslog 将会将所有消息转发到 TCP 端口,我们将在那里让 Telegraf 捕获它们!
Linux
由于 Mac OS 只不过是另一种 Unix 变体,Linux 的指令与 Mac OS X 指令非常相似。我们仍然会使用 rsyslog
,但在许多 Linux 发行版中,rsyslog 现在是默认的,所以我们已经很接近了。最简单的方法是直接查看 /etc
目录,看看你是否有一个 syslog.conf
文件或一个 rsyslog.conf
文件。如果你没有 rsyslog.conf
文件,你需要安装它。
$ sudo apt-get install rsyslog
在 Ubuntu 和其他基于 Debian 的系统上会帮你安装。如果你的 Linux 使用像 yum
这样的不同包管理器,请使用该工具安装 rsyslog。
配置
就像在 Mac OS 上一样,我们需要在 rsyslog.conf 文件中添加几行,所以使用 sudo 和你喜欢的编辑器,将以下内容添加到你的配置文件中
$WorkDirectory /tmp/rsyslog # temporary directory for storing data
$ActionQueueType LinkedList # use asynchronous processing
$ActionQueueFileName srvrfwd # set file name, also enables disk mode
$ActionResumeRetryCount -1 # infinite retries on insert failure
$ActionQueueSaveOnShutdown on # save in-memory data if rsyslog shuts down
$ModLoad imudp #loads the udp module
#listen for messages on udp localhost:514 $UDPServerAddress localhost $UDPServerRun 514 *.*
@@(o)127.0.0.1:6514;RSYSLOG_SyslogProtocol23Format
当然,你需要重新启动 rsyslog 以强制它读取新的配置文件。如果你使用的 Linux 变体支持 systemd,那么
$ sudo systemctl restart rsyslog
就能解决问题。如果你不支持,你总是可以直接运行
$ ps -elf | grep syslog
并为得到的进程 ID 发送 kill -HUP PID。你的 rsyslog 现在应该会将 syslog 消息发布到 TCP 端口,我们可以继续配置 Telegraf。
配置 Telegraf
首先,请注意你需要有最新版本的 Telegraf,本文发布时为 v1.7。如果你不确定你安装了哪个版本的 Telegraf,那么
$ telegraf --version
就能告诉你。
现在你将进入你的 telegraf.conf 文件(在 Linux 中通常位于 /etc/telegraf
,在 Mac OS 中通常位于 /usr/local/etc/telegraf
),并取消以下行的注释
# # Accepts syslog messages per RFC5425
[[inputs.syslog]]
# ## Specify an ip or hostname with port - eg., tcp://127.0.0.1:6514, tcp://10.0.0.1:6514
# ## Protocol, address and port to host the syslog receiver.
# ## If no host is specified, then localhost is used.
# ## If no port is specified, 6514 is used (RFC5425#section-4.1).
server = "tcp://127.0.0.1:6514"
如果你在升级时保留了旧版本的配置文件,你只需将这些行添加到文件中即可。
现在重新启动 Telegraf,你应该会在你的数据库中得到日志文件。从命令行
$ influx
> use telegraf
Using database telegraf
> show measurements
...
syslog
...
你现在数据库中有 syslog 数据了!太棒了!但这有什么用呢?
可视化日志数据
现在你已经有了将 syslog 数据放入 InfluxDB,你能用它做什么呢?如果你够勇敢,你可以安装 Chronograf 的夜间构建版本,并使用其中的日志查看器来查看你的日志,并深入挖掘
我可以通过简单地点击它们来轻松看到我的串行守护进程的所有日志事件进行过滤
所以,问题是,你现在能在 Chronograf 中可视化你的 syslog 数据后能做什么呢?