工作记录:Skywalking 对Java服务进行日志分析指标收集
版本号:8.9.0
目标:通过日志分析生成日志对应级别指标,skywalking页面展示指标采集情况,并配置指标规则告警到钉钉
分析前提:skywalking已收集到对应服务的日志 ,日志列表可查询到服务日志
1.日志分析指标配置
Application配置
修改config/application.yaml
log-analyzer:
selector: ${SW_LOG_ANALYZER:default}
default:
lalFiles: ${SW_LOG_LAL_FILES:lal}
malFiles: ${SW_LOG_MAL_FILES:log-mal}
- log-analyzer/defalut/lalFiles配置lal : 使用config/lal/lal.yaml配置文件
- log-analyzer/defalut/malFiles配置log-mal: 使用config/log-mal-rules/log-mal.yaml配置文件
LAL配置
修改config/lal/lal.yaml配置文件
rules:
- name: log_count_rule
dsl: |
filter {
text {
abortOnFailure true
regexp "(?<timestamp>\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}.\\d{3}) \\[TID:(?<tid>.+?)] \\[(?<thread>.+?)] (?<level>\\w{4,})"
}
extractor {
metrics {
timestamp log.timestamp as Long
labels level: parsed.level, service: log.service, instance: log.serviceInstance, timestamp: log.timestamp
name "log_count"
value 1
}
}
sink {
if (parsed.level == "INFO") {
enforcer { }
}
if (parsed.level == "ERROR") {
enforcer { }
}
if (parsed.level == "WARN") {
enforcer { }
}
}
}
MAL配置
修改config/log-mal-rules/log-mal.yaml配置文件
expSuffix: instance(['service'], ['instance'])
metricPrefix: log
metricsRules:
- name: count_info
exp: log_count.tagEqual('level', 'INFO').sum(['service', 'instance']).downsampling(SUM)
- name: count_warn
exp: log_count.tagEqual('level', 'WARN').sum(['service', 'instance']).downsampling(SUM)
- name: count_error
exp: log_count.tagEqual('level', 'ERROR').sum(['service', 'instance']).downsampling(SUM)
2.重启SKywalking
关闭SKywalking
lsof -i:8088
lsof -i:11800
kill -9 对应PID
启动Skywalking
skywalking目录下启动
sh bin/startup.sh
查看启动日志
tail -f logs/skywalking-oap-server.log
无异常表示正常启动
有异常有可能是索引创建失败的问题 可以忽略
3.指标配置展示
UI首页
新建指标栏目
1:解锁
2:新建log栏目
3:新建指标
4:指标配置明细(log_count_info,log_count_warn,log_count_error)
5:点击上锁按钮保存
指标收集情况
4.指标告警钉钉配置
非oal指标不支持告警
5.调试历程记录
ES索引异常处理
最初使用官方文档的lal及mal配置启动服务,查看启动日志偶尔会出现索引不存在的情况
不存在的索引比如:
sw_profile_task
sw_alarm_record
sw_top_n_database_statement
sw_browser_error_log
查阅资料发现:定时任务删除索引时未删除对应索引模板会导致这个问题
问题解决:使用es内部的删除模板方法
curl -XDELETE http://127.0.0.1:9200/_template/索引模板名
后续:调整删除索引的脚本及时清理索引模板
8.9.0本地环境部署
下载zip文件本地启动缺少jar包
改用git拉取分支并按照网上教程生成编译文件并调整启动目录 成功启动
本地fuzhiweb启动添加agent代理 启动fuzhiweb
指标收集调试
源码调试dsl脚本 发现正则表达式格式有问题 提取不到parsed字段数据 修改正则匹配
timestamp字段不能使用parsed.timestamp String类型 通过调试发现log有时间戳字段 改用log.timestamp 数据收集成功
使用sink关键字收集对应日志进行持久化 否则日志丢失
mal脚本调试使用如下配置不能收集到value值(日志数量)
expSuffix: instance(['service'], ['instance'])
metricPrefix: log
metricsRules:
- name: count_info
exp: log_count.tagEqual('level', 'INFO').sum(['service', 'instance'])
改用downsampling(SUM)函数成功收集到value值(日志数量)
SkywalkingUI指标页面展示
页面接口采用graphql查询语言 响应值返回value属性值
1:配置metrics
2:设置区间值
3:指标域
告警规则调试
AlarmCore类 启动告警规则10s定时轮询
触发告警的meta来源于core.oal以及jvm.oal 因此无法匹配告警规则中的指标名称
6.记录总结
skywalking8.9.0支持日志分析生成日志对应级别指标,并在skywalking页面展示指标采集情况
skywalking8.9.0不支持lal、mal协作收集到的指标进行规则告警