有nginx.conf
....
http {
....
log_format main '"$remote_addr" "$time_iso8601"';
access_log /var/log/nginx/access.log main;
.....
}
日志访问.log
"127.0.0.1" "2019-12-28T10:53:20+00:00"
"127.0.0.1" "2019-12-28T10:53:20+00:00"
有流利的(td代理)
td-agent.conf
<source>
@type tail
path /var/log/nginx/access.log
pos_file /tmp/nginx-access-log.pos
tag nginx
format /"(?<remote_addr>[0-9,\.]*)" "(?<time_iso8601>[^ ]*)"/
time_format %Y-%m-%dT%H:%M:%S.%NZ
</source>
<filter foo.bar>
@type record_transformer
enable_ruby
<record>
time_iso8601 ${Time.strptime(record['time_iso8601'], '%Y-%m-%d %H:%M:%S').iso8601}
</record>
</filter>
<match nginx>
@type clickhousejson
host 127.0.0.1
port 8123
database fluent
table fluent
datetime_name time_iso8601
</match>
在clickhouse中,我创建了一个数据库和一个表。
create database fluent;
CREATE TABLE fluent.fluent (
Date Date MATERIALIZED toDate(DateTime),
remoteip String,
DateTime DateTime)
ENGINE = MergeTree(Date, DateTime, 8192);
日志被发送到clickhouse。
│ │ 0000-00-00 00:00:00 │
如何在fluentd(td代理)中将time\u格式从time\u iso8601更改为%y-%m-%d%h:%m:%s并发送到clickhouse?
1条答案
按热度按时间r6vfmomb1#
当存在未知或不直接支持的日期格式需要插入到clickhouse表中时,您可以尝试在clickhouse中对其进行解析,而不必更改源中的日期,无论其格式如何。
您可以使用parsedatetimebesteffort函数来尝试。
对于您的情况,可以创建如下表:
它存储
DateTime
列,因为它在String
列,然后使用parseDateTimeBestEffort
.如果这不起作用,您可以在
DateTime
列,并尝试使用todatetime函数和substring的组合手动解析原始值。