您是否知道CratedB可以成为服务器日志的好商店?
如果您一直在使用日志聚合工具,甚至是一些最先进的商业SIEM系统,您可能会经历与我相同的挫败感:
- 搜索登录时间长时间时的超时
- 复杂而专有的查询语法
- 困难将日志数据上的查询集成到应用程序监视仪表板
将服务器日志存储在CRATEDB上可以解决这些问题,它允许使用标准SQL查询日志,并从支持PostgreSQL协议的任何工具中查询日志;其独特的索引还使全文查询和聚合超快。
让我举一个例子。
首先,我们需要一个cratedB的实例,为此目的最好有一个专用群集,将监视系统与正在监视的系统分开,但是为了该演示,我们只能拥有一个Docker容器上的节点群集:
sudo docker run -d --name cratedb --publish 4200:4200 --publish 5432:5432 crate -Cdiscovery.type=single-node
接下来,我们需要一个表来存储日志,让我们连接到http://localhost:4200/#!/console并运行:
CREATE TABLE doc.systemevents (
message TEXT
,INDEX message_ft USING FULLTEXT(message)
,facility INTEGER
,fromhost TEXT
,priority INTEGER
,DeviceReportedTime TIMESTAMP
,ReceivedAt TIMESTAMP
,InfoUnitID INTEGER
,SysLogTag TEXT
);
提示:如果您在无头系统上,也可以使用command-line tools运行查询。
然后我们需要一个记录系统的帐户:
CREATE USER rsyslog WITH (PASSWORD='pwd123');
我们需要在上表上授予权限:
GRANT DML ON TABLE doc.systemevents TO rsyslog;
我们将使用rsyslog将日志发送到cratedB,对于此设置,我们需要rsyslog
V8.2202或更高版本,并且ompgsql
模块:
sudo add-apt-repository ppa:adiscon/v8-stable
sudo apt-get update
sudo apt-get install rsyslog
sudo debconf-set-selections <<< 'rsyslog-pgsql rsyslog-pgsql/dbconfig-install string false'
sudo apt-get install rsyslog-pgsql
现在,我们将其配置为使用我们之前创建的帐户:
echo 'module(load="ompgsql")' | sudo tee /etc/rsyslog.d/pgsql.conf
echo '*.* action(type="ompgsql" conninfo="postgresql://rsyslog:pwd123@localhost/doc")' | sudo tee -a /etc/rsyslog.d/pgsql.conf
sudo systemctl restart rsyslog
如果您对涉及排队的更高级设置感兴趣,以获得生产方案的其他可靠性,则可以在rsyslog documentation中阅读有关可用设置的更多信息。
现在,让我们想象我们想运行一个带有MediaWiki的容器来托管Intranet,我们希望所有日志都进入CratedB,我们可以使用以下部门部署:
sudo docker run --name mediawiki -p 80:80 -d --log-driver syslog --log-opt syslog-address=unixgram:///dev/log mediawiki
如果我们现在将Web浏览器指向端口80 http://localhost/,我们将看到一个新的MediaWiki页面。
让我们稍微播放以生成日志条目,只需单击“设置Wiki”,然后继续进行一次。
这将在doc.systemevents
表中生成条目,syslogtag
匹配运行该站点的容器的容器ID。
我们现在可以使用MATCH predicate查找我们感兴趣的错误消息:
SELECT devicereportedtime,message
FROM doc.systemevents
WHERE MATCH(message_ft, 'Could not reliably determine') USING PHRASE
ORDER BY 1 DESC;
+--------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| devicereportedtime | message |
+--------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| 1691510710000 | AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 172.17.0.3. Set the 'ServerName' directive globally to suppress this message |
| 1691510710000 | AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 172.17.0.3. Set the 'ServerName' directive globally to suppress this message |
+--------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
现在让我们看看哪些日志源创建了最多的条目:
SELECT syslogtag,count(*)
FROM doc.systemevents
GROUP BY 1
ORDER BY 2 DESC
LIMIT 5;
+----------------------+----------+
| syslogtag | count(*) |
+----------------------+----------+
| kernel: | 23 |
| 083053ae8ea3[52134]: | 20 |
| systemd[1]: | 15 |
| sudo: | 10 |
| rsyslogd: | 5 |
+----------------------+----------+
希望您发现这很有趣。请随时让我们知道您在CrateDB Community中的想法。