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: truenetworks:- 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_logstashqueue.type: persistedpath.config: '/usr/share/logstash/pipeline/bis1_logstash.conf'- pipeline.id: bis2_logstashqueue.type: persistedpath.config: '/usr/share/logstash/pipeline/bis2_logstash.conf'- pipeline.id: bis3_logstashqueue.type: persistedpath.config: '/usr/share/logstash/pipeline/bis3_logstash.conf'
7. schedule可以参考 小记:Logstash Jdbc input plugin的schedule参数不生效的问题
8. 打印Logstash执行日志
在output节点下添加stdout输出。
stdout { codec => rubydebug }
