DIS Agent 常见客户问题
1. 如何判断是否有数据发送
以下日志表示正在有数据发送到DIS:
c.h.d.a.t.DISSender Put 1 records to [stz_test_agent] spend 1454ms
2. 数据是否可能出现重传和漏传
单线程的情况下:
只可能出现重传。数据发送了,但是CheckPoint写成功之前进程挂了或者写失败了(比如磁盘满等),就有可能导致重传。
多线程的情况下:
可能出现重传和漏传。
数据发送了,但是CheckPoint写成功之前进程挂了,就有可能导致重传。
CheckPoint比较新的线程先提交CheckPoint成功,但是CheckPoint比较旧的线程发送成功前进程挂了,就有可能出现漏传。
(打个比方,sendingThreadSize配置的是2,也就是两个线程在发送,线程1读取了1到5行数据,线程2读取了6到10行数据,线程2发送成功而且记录了CheckPoint,但是线程1还没有发送同时Agent异常退出了,那么这个时候1到5行数据就会丢失。)
3. Agent单条记录是否有大小限制
Agent启动时会判断通道类型,对于普通通道,单条记录大于1M时会被切割;对于高级通道,单条记录大于5M时会被切割。
4. 日志滚动方式是xxx.log.*,会影响吗?
归档文件是什么格式不影响,不管匹配规则能不能匹配到,归档文件的inode都是已上传过的,不会出现重复上传。
5. 关于 Agent 的通配符
filePattern配置/agent/*和/agent/是一样的效果
6. DIS Agent 运行需要多少内存?
默认情况下读取缓存和发送队列需要缓存10W条记录,假如每条记录1KB,则最少需要100M的内存,计算方式:
每批数据数量 * 100 * 2 * 每条记录大小
Agent 的内存配置在start-dis-agent.sh中:
JAVACMD="java"
JAVA_START_HEAP="256m" # 默认xms为256m
JAVA_MAX_HEAP="512m" # 默认xmx为512m
7. DIS Agent 如何判断某个文件是否需要上传?
DIS Agent 是根据文件的inode来判断是否需要上传的,比如某个文件采集完成之后,将文件mv走,然后再mv回来,文件的inode没变化,那么就不会重新采集;但是如果将文件mv走,然后再cp回来,那么inode发生变化就会重新采集,使用stat命令可以查看文件inode信息:
$ stat logstash.stack
File: ‘logstash.stack’
Size: 513727 Blocks: 1008 IO Block: 4096 regular file
Device: fd01h/64769d Inode: 932370 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2020-03-25 11:57:14.058120270 +0800
Modify: 2020-03-25 11:57:14.076120599 +0800
Change: 2020-03-25 11:57:14.076120599 +0800
Birth: -
8. DIS Agent 如何配置无限重试?
修改重试配置项,可以配置无限重试:
records.retries: -1
exception.retries: -1
9. DIS Agent 配置文件格式有问题如何排查?
使用YAML、YML在线编辑器格式化校验下:https://www.bejson.com/validators/yaml_editor/
10. 如何判断 DIS Agent 已经成功启动?
2020-05-07 10:32:28.526+0800 [INFO ] (main) c.h.d.a.Agent Agent(dis-agent): Startup completed in 300061 ms.
- 点赞
- 收藏
- 关注作者
评论(0)