天天看点

日志服务十大经典问题日志服务十大经典问题

能用,装好logtail之后要额外做一个配置

先找到自己的阿里云账号id,例如:123456

linux

/etc/ilogtail/users/123456

windows

原理同linux,创建、删除用户标识同名文件到目录 c:logtaildatausers

c:logtaildatausers123456

注意:非阿里云的机器,或者是阿里云的ecs但是跟日志服务不是一个账号买的,都必须做这一步

先看logtail状态是否在running

/etc/init.d/ilogtaild status

如果状态running的话,打开文件/usr/local/ilogtail/ilogtail.log

主账号没有access key,会报错 unauthorized errormessage:no authority, denied by acl,现在主账号必须有access key才能正常运行logtail

找到配置(示例是杭州的project,走内网)

检查project的域跟这个能否对上,测试一下网络连通性,装错网络请卸载后(命令 sh logtail.sh uninstall)后重装logtail。

经典网络ecs

vpc网络ecs

公网

如果域没有问题,网络也是通的,找到uuid开头的这一段

logtail started, appinfo:{ "uuid" : "ce0da1d4-be7e-41d3-b153-6f33b5471269",

"hostname" : "hostname",

"instance_id" : "8898cc48-566c-11e7-bffa-00163e13138d",

"ip" : "xxx.xxx.xxx.xxx",

"logtail_version" : "0.12.5",

"os" : "linux; 3.10.0-514.6.2.el7.x86_64; #1 smp thu feb 23 03:04:39 utc 2017; x86_64",

"update_time" : "2017-06-21 18:29:40"

}

找到这一行 "ip" : "xxx.xxx.xxx.xxx",控制台必须配置这个ip,否则无心跳。

如果发现文件中这个ip为空,说明您的机器没有第一块网卡(ifconfig eth0),遇到这种情况,请手工绑定一下hosts

/etc/hosts

第一行添加,保存

xxx.xxx.xxx.xxx machinename

xxx.xxx.xxx.xxx可以填其他网卡ip,machinename用hostname命令取一下。

控制台配置的ip必须跟这个文件里面的对上,这个ip是个标签,不影响走哪个网络,取这个ip的方法:先取/etc/hosts 里面绑定的ip,如果没有绑定,取第一块网卡的ip(ifconfig eth0),最后会生成在/usr/local/ilogtail/ilogtail.log 这个文件里面,所以直接看这个文件最简单。

可以使用自动配置正则,参考这个动画

日志服务十大经典问题日志服务十大经典问题

logtail配置监控的文件,有没有实时写入?logtail收集数据,要被监控的文件有实时写入,才会触发收集动作。

如果logtail配置里面有time字段,看看您的数据,时间区间要在 -12小时 ~ +15分钟 这个区间的数据才能被收集。

然后确认下rsyslog版本,要装7以上版本,否则ilogtail.log里面会有报错无法上传数据 message:invalid time format, support unix-timestamp

要使用查询功能,必须开启索引。注意索引功能是收费的,所以需要您手动打开,如图:

日志服务十大经典问题日志服务十大经典问题

索引打开了,还是查不到数据

对索引的任何更改,打开索引/配置索引,都只对这个时间点后收集上来的数据有效,旧数据都无效。

点击查询页面的统计图表,为何没有数据?

为什么查有些关键词查不到

索引有分词配置,分为全文索引和键值索引,如截图

日志服务十大经典问题日志服务十大经典问题

只有被分词分出来的term才能被搜索出来,只有配置了键值索引才能用key:value这样的语法查询。

注意,为了节约索引费用,我们做了索引优化,配置了键值索引的key,不进全文索引。举例: 日志里面有个key叫做 message,并且配置了键值索引,加了空格做分词(加空格做分词,请把空格加到分词字符串的中间)。例如:message: this is a test message。

可以用 key:value 的格式 message:this 查到,但是直接查this查不到,因为配置了键值索引的key,不进全文索引了。

配置时候,注意以下事项:

只支持主账号做投递配置,不支持子账号

如果maxcompute的项目里面已经建好表,可以选一张表,如果没有就选新建表,会自动帮您创建一张表,配置界面的左边,填日志服务的key名称,右边填maxcompute表的列名。

分区列建议用日志服务的系统保留字段__partition_time__,用日志采集时间来做分区,分区时间格式使用java simpledateformat,例如: 以天为分区yyyymmdd,以小时为分区yyyymmddhh,以分钟为分区yyyymmddhhmm,注意不要使用精确到秒的日期格式,很容易导致单表的分区数目超过限制(6万),该格式不得包含斜线字符/ ,因为斜线字符也是maxcompute 保留字。

maxcompute分区列不允许空,如果您不用系统保留字段__partition_time__,要用自己的key,一定要确保这个key存在且有值,如果这个key没有值,投递的时候会忽略这条数据,而且这个key的值枚举不超过6万。

投递时候对于非分区列会做下cast,如果cast没有成功,在maxcompute那边看数据会发现里面是 n,这种情况是您的日志服务上的数据格式不符合maxcompute表的要求。

如果同时配置了oss和maxcompute投递,oss和maxcompute的投递名称不能重名。

投递任务报错

odps-0420095: access denied - authorization failed [4019], you have no privilege 'odps:describe' on {acs:odps:*:projects//tables/}.

是因为默认添加的权限丢失,在maxcompute上运行下面三个命令重新添加一下权限,odps_project_name odps_table_name替换成您自己的项目名和表名

用户在调用sdk或者是在 ilogtail.log中发现这样的错误, write quota exceed,就是分区处理能力不够了,需要分裂下分区。

每个分区可提供一定的服务能力:

写入:5mb/s,2000次/s

读取:10mb/s,100次/s

分裂分区如截图:

日志服务十大经典问题日志服务十大经典问题

logtail的配置默认是不生成topic的,但是logtail的配置路径往下递归,用户很多时候需要区分数据来自哪个文件夹,这个时候就可以通过文件路径正则来配置生成topic,举个例子如截图,监控 /var 这个目录下的所有子目录,info.log文件

如果有个子目录是这样的 /var/abcd/info.log

abcd就会被抽取出来作为topic,这样就可以通过topic来区分数据来自哪个目录了。

数据过滤,指定字段key存在且value符合正则表达式的日志会被保留,多个条件是and的关系,下面的截图配置,当request字段与(posts.)|(gets.) 匹配成功,logtail将该日志上传至日志服务。

日志服务十大经典问题日志服务十大经典问题

授权策略采用通用的ram权限配置格式,下面这个配置可以登录控制台listproject,查看project下的logstore

<a href="https://help.aliyun.com/document_detail/29050.html">资源列表</a>

<a href="https://help.aliyun.com/document_detail/29051.html">动作列表</a>

上传数据时候如果有time字段,这个时间必须在当前基点[-7 天~15 分钟]范围内,否则会返回400错误。

日志消费接口是直接读loghub的,可以直接用速度快,日志查询读的是索引,要开通索引才能用速度慢。

索引查询做全量查询速度不是非常快,建议先用 gethistograms 取得日志分布区间,再用 getlogs一个区间一个区间去取数据,取数据的时候要检查iscompleted()是不是true,否则查询结果不准确需要重试,getlogs最大每次只能返回100条数据。

继续阅读