1. 时区问题
Logstash默认时区为UTC,我们所在的时区是UTC+8,所以会有8小时的时差。使用jdbc-input-plugin
时,sql中的所有时间字段都需要处理。下面给出几个例子:
sql中的
**datetime**
类型字段转为毫秒级时间戳并增加8小时ruby{
code => "event.set('create_time_unix_time', (event.get('create_time').to_f.round(3)*1000).to_i)"
}
ruby {
code => "event.set('create_time', (event.get('create_time_unix_time') + 8*60*60*1000))"
}
sql中的
**datetime**
类型字段转为**yyyy-MM-dd HH:mm:ss**
格式的字符串并增加8小时ruby {
code => "event.set('create_time_format_date', (event.get('create_time').time.localtime + 8*60*60).strftime('%Y-%m-%d %H:%M:%S'))"
}
ruby {
code => "event.set('create_time', event.get('create_time_format_date'))"
}
2. 给
@timestamp
赋值使用时间戳赋值错误率低
date {
match => ["create_time", "UNIX_MS"]
}
3. 删除多余的字段
mutate {
remove_field => [ "create_time_unix_time", "create_time_format_date" ]
}
4.
tracking_column
,tracking_column_type
,:sql_last_value
的使用**tracking_column**
只有 numeric, timestamp 2种类型。
按时间增量查询时,可以使用timestamp类型的字段,如创建时间、修改时间。
按主键增量查询时,可以使用numeric类型的字段,这里要注意的是,numeric类型的主键只能是自增主键,使用雪花算法生成的主键会造成:sql_last_value
不更新。5.
last_run_metadata_path
使用裸机环境或云环境部署可以忽略此条,此条只针对Docker环境。
last_run_metadata_path
的作用是在文件中保存:sql_last_value
上一次后的值,当使用Docker时,如果容器被销毁,此文件也会跟容器一起被销毁,所以需要通过Docker的volume机制,将文件保存到物理存储中。last_run_metadata_path
指向文件所在的文件夹需要在启动Docker前创建好并授予读写权限,启动Docker在volume中做映射,如下,我使用的是docker-compose: ```yaml version: ‘3.8’
networks: elastic: driver: bridge
services: logstash02: image: logstash:7.16.2 container_name: logstash02 volumes:
- ./pipeline/:/usr/share/logstash/pipeline/
- ./library/:/usr/share/logstash/library/
- ./sql/:/usr/share/logstash/sql/
- ./settings/:/usr/share/logstash/config/
- ./logs/:/usr/share/logstash/logs/
- ./data/:/usr/share/logstash/data/
privileged: true
networks:
- elastic
`last_run_metadata_path`指向文件的示例如下:<br />当`tracking_column_type`为`numeric`
—- 3560
当`tracking_column_type`为`timestamp`
—- !ruby/object:DateTime ‘2022-12-20 10:13:00.000000000 Z’
<a name="KAmjQ"></a>
## 6. 多数据源同步数据
当使用1个Logstash同时同步多个数据源的数据时,一定要保存物理机的内存充足,其次是建立多个管道,不要在单个管道中同步多种数据,以免造成堵塞。
```yaml
- pipeline.id: bis1_logstash
queue.type: persisted
path.config: '/usr/share/logstash/pipeline/bis1_logstash.conf'
- pipeline.id: bis2_logstash
queue.type: persisted
path.config: '/usr/share/logstash/pipeline/bis2_logstash.conf'
- pipeline.id: bis3_logstash
queue.type: persisted
path.config: '/usr/share/logstash/pipeline/bis3_logstash.conf'
7. schedule可以参考 小记:Logstash Jdbc input plugin的schedule参数不生效的问题
8. 打印Logstash执行日志
在output
节点下添加stdout
输出。
stdout { codec => rubydebug }