本文介绍如何通过日志服务控制台创建Logtail采集配置来采集脚本执行日志。
前提条件
已在服务器上安装Linux Logtail 1.7.1及以上版本。具体操作,请参见安装Logtail(Linux系统)。
功能说明
Logtail通过配置的用户,调用配置的脚本命令,执行配置的脚本内容,从而获取脚本执行日志。
支持设置bash、shell、python2、python3四种脚本命令。
支持设置运行命令使用的用户,以实现脚本可访问的资源限制。
脚本执行超时的时候,系统自动停止脚本执行,Logtail不会采集本次脚本执行日志。
操作步骤
登录日志服务控制台。
在接入数据区域,选择自定义数据插件。
选择目标Project和Logstore,单击下一步。
创建机器组。
如果您已有可用的机器组,请单击使用现有机器组。
如果您还没有可用的机器组,请执行以下操作(以ECS为例)。
在ECS机器页签中,通过手动选择实例方式选择目标ECS实例,单击创建。
具体操作,请参见安装Logtail(ECS实例)。
重要如果您的服务器是与日志服务属于不同账号的ECS、其他云厂商的服务器和自建IDC时,您需要手动安装Logtail。具体操作,请参见安装Logtail(Linux系统)或安装Logtail(Windows系统)。手动安装Logtail后,您必须在该服务器上手动配置用户标识。具体操作,请参见配置用户标识。
安装完成后,单击确认安装完毕。
在创建机器组页面,输入名称,单击下一步。
日志服务支持创建IP地址机器组和用户自定义标识机器组,详细参数说明请参见创建IP地址机器组和创建用户自定义标识机器组。
选中目标机器组,将该机器组从源机器组移动到应用机器组,单击下一步。
重要创建机器组后立刻应用,可能因为连接未生效,导致心跳为FAIL,您可单击自动重试。如果还未解决,请参见Logtail机器组问题排查思路(主机场景)。
在数据源设置页签中,设置配置名称和插件配置,然后单击下一步。
inputs
为Logtail采集配置,必选项,请根据您的数据源配置。重要一个
inputs
中只允许配置一个类型的数据源。processors
为Logtail处理配置,可选项。您可以配置一种或多种处理方式。如果当前的
inputs
配置无法满足日志解析需求,您可以在插件配置中添加processors配置,即添加Logtail插件处理数据。例如提取字段、提取日志时间、脱敏数据、过滤日志等。更多信息,请参见概述。
{ "inputs":[ { "type":"input_command", "detail":{ "ScriptType":"python2", "User":"test", "ScriptContent":"print(\"test input_command 0\")\nprint(\"test input_command 1\")\nprint(\"test input_command 2\")\nprint(\"test input_command 3\")\nprint(\"test input_command 4\")\nprint(\"test input_command 5\")\nprint(\"test input_command 6\")\nprint(\"test input_command 7\")\nprint(\"test input_command 8\")\nprint(\"test input_command 9\")\n", "ContentEncoding":"PlainText", "CmdPath":"/usr/bin/python", "TimeoutMilliSeconds":1000, "IgnoreError":false, "Environments":[ "DEBUG=true" ], "IntervalMs":5000 } } ] }
参数
类型
是否必选
说明
type
string
是
数据源类型,固定为
input_command
。ScriptType
string
是
指定脚本内容的类型,目前支持bash、shell、python2、python3。
User
string
是
运行命令使用的用户名,只支持非Root用户。
说明请确保指定的用户名在机器中存在。
建议配置最小权限,只授予需要关注的目录或文件rwx权限 。
ScriptContent
string
是
脚本内容,支持PlainText和Base64加密的内容,长度在512*1024字节内。
ContentEncoding
string
否
脚本内容的文本格式,可选值。
PlainText(默认值):纯文本,不编码。
Base64:Base64编码。
LineSplitSep
string
否
脚本输出内容的分隔符,为空时不进行分割,全部作为一条数据返回。
CmdPath
string
否
执行脚本命令的路径,如果为空,则使用默认路径。默认路径如下:
bash:/usr/bin/bash
shell:/usr/bin/sh
python2:/usr/bin/python2
python3:/usr/bin/python3
TimeoutMilliSeconds
string
否
执行脚本的超时时间,单位为毫秒,默认值为3000。
IgnoreError
Bool
否
插件执行出错时是否输出Error日志。默认值为false,表示不忽略。
Environments
[]string
否
环境变量,默认为os.Environ()的值,如果设置了Environments,则在os.Environ()的基础上追加设置的环境变量。
IntervalMs
int
是
采集触发频率或脚本执行频率。单位为毫秒,默认值为5000。
预览数据及创建索引,然后单击下一步。
日志服务默认开启全文索引。您也可以根据采集到的日志,手动创建字段索引,或者单击自动生成索引,日志服务将自动生成字段索引。具体操作,请参见创建索引。
重要如果您要查询和分析日志,那么全文索引和字段索引必须至少启用一种。同时启用时,以字段索引为准。
单击查询日志,系统将跳转至Logstore查询分析页面。
您需要等待1分钟左右,待索引生效后,才能在原始日志页签中,查看已采集到的日志。具体操作,请参见查询和分析日志。
使用示例
通过python2脚本获取系统时间。
Logtail采集配置
{ "inputs":[ { "type":"input_command", "detail":{ "ScriptType":"python2", "User":"test", "ScriptContent":"print(\"test input_command 0\")\nprint(\"test input_command 1\")\nprint(\"test input_command 2\")\nprint(\"test input_command 3\")\nprint(\"test input_command 4\")\nprint(\"test input_command 5\")\nprint(\"test input_command 6\")\nprint(\"test input_command 7\")\nprint(\"test input_command 8\")\nprint(\"test input_command 9\")\n", "ContentEncoding":"PlainText", "CmdPath":"/usr/bin/python", "TimeoutMilliSeconds":1000, "IgnoreError":false, "Environments":[ "DEBUG=true" ], "IntervalMs":5000 } } ] }
采集到的日志
content:"Mon Aug 7 02:17:52 UTC 2023" script_md5:"a9564ebc3289b7a14551baf8ad5ec60a" __pack_meta__:"1|MTY4OTI1MzExNTU2NTE2MzQ1NA==|2|1" __topic__:"" __source__:"172.17.0.2" __tag__:__pack_id__:"D7B7F988051A3019-0" __tag__:__hostname__:"bc6c7472f257" __tag__:__client_ip__:"8.218.101.91" __tag__:__receive_time__:"1691374673" __time__:"1691374672"
字段说明
字段
说明
content
采集到的脚本执行日志。
script_md5
脚本内容的MD5值。
问题排查
使用Logtail采集日志后,如果预览页面或查询页面无数据,您可以参见Logtail采集日志失败的排查思路进行排查。