首页 > 编程语言 >工作记录:Skywalking 对Java服务进行日志分析指标收集

工作记录:Skywalking 对Java服务进行日志分析指标收集

时间:2023-06-02 11:12:29浏览次数:169  
标签:count Java log level 指标 instance Skywalking 日志

版本号: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首页

image

新建指标栏目

image

1:解锁
2:新建log栏目
3:新建指标
4:指标配置明细(log_count_info,log_count_warn,log_count_error)
5:点击上锁按钮保存

指标收集情况

image

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属性值
image

1:配置metrics
2:设置区间值
3:指标域

告警规则调试

AlarmCore类 启动告警规则10s定时轮询
image

触发告警的meta来源于core.oal以及jvm.oal 因此无法匹配告警规则中的指标名称
image

6.记录总结

skywalking8.9.0支持日志分析生成日志对应级别指标,并在skywalking页面展示指标采集情况
skywalking8.9.0不支持lal、mal协作收集到的指标进行规则告警

7.参考资料

skywalking源码库
skywalking官网

标签:count,Java,log,level,指标,instance,Skywalking,日志
From: https://www.cnblogs.com/sanxingblogs/p/17451180.html

相关文章

  • java 如何保留小数位的0?(#.##与0.00的区别)
    1.情景展示如上图所示,在java语言中,如果后面的小数位是零的话,会被自动抹除。但在实际场景中,我们往往需要对小数位进行管理(统一展示小数的位数):不足小数位的进行补零操作,多余的小数位进行舍弃或者四舍五入。具体应如何实现?2.具体分析通过DecimalFormat.format()方法实现。3......
  • 怎么创建Java项目并在项目下创建包再创建类
    1. 如何创建Java项目?第一步:打开idea,选中Create New Project第二步:选择Java项目,选择配置好的JDK环境,选中JavaEE版本为JavaEE8,然后点Next第三步:啥也不点,直接点Next第四步:填你的项目名称(根据需求命名),选项目路径,点击Finish,完成项目创建到这里,一个简单的Java项目就创建完毕了!接下来我......
  • JavaScript中的循环(6个)
    LoopesforwhiledowhileforofforEachforin1.forfor(initialization,condition,increment/decrement){//codegoeshere}eg:for(leti=0;i<6;i++){console.log(i)}2.whileUsingthewhileloopwhenwedonotknowhowmanitera......
  • 6.2java上课用
    packagexu01;publicclassxch2extendsThread{ publicxch2(Stringname,intpriorty){ super(name); this.setPriority(priorty); } publicvoidrun() {System.out.println(this.getName()+"正在执行"); try{ Thread.sleep(1000);//让线程休眠1秒钟,然后再出现异常 }cat......
  • VsCode开发 Java Maven Springboot
    安装java相关的扩展插件在VisualStudioCode中打开扩展(Ctrl+Shift+X),输入关键词java、spring分别下载Java开发插件包和springboot插件包 配置参数点击设置按钮,进入设置选项,配置用户设置(文件->首选项->设置  Ctrl+,)添加如下代码:"java.errors.incompleteClasspath.severity......
  • Java并发(九)----线程join、interrupt
    1、join方法详解1.1为什么需要join?下面的代码执行,打印r是什么?staticintr=0;publicstaticvoidmain(String[]args)throwsInterruptedException{  test1();}privatestaticvoidtest1()throwsInterruptedException{  log.debug("开始");  T......
  • Java并发(八)----使用线程避免cpu占用100%
    1、sleep实现在没有利用cpu来计算时,不要让while(true)空转浪费cpu,这时可以使用yield或sleep来让出cpu的使用权给其他程序while(true){  try{ Thread.sleep(50); }catch(InterruptedExceptione){    e.printStackTrace(); }......
  • IDEA 创建JavaWeb项目(不依赖 springboot)手动整合 SSM框架
    目录 1.创建一个Maven项目2.创建webapp和WEB-INF目录即可3.设置web.xml文件和web文件目录4.导入相关ssm框架的pom依赖文件5.创建对应的包结构:6.添加配置文件(配置mybatis、spring、springMvc等配置文件)7.web.xml配置文件8. 配置本地Tomcat运行9.打包发布1.创建一个Mav......
  • 基于JAVA的springboot+vue财务管理系统,附源码+数据库+论文+PPT
    1、项目介绍随着信息技术和网络技术的飞速发展,人类已进入全新信息化时代,传统管理技术已无法高效,便捷地管理信息。为了迎合时代需求,优化管理效率,各种各样的管理系统应运而生,各行各业相继进入信息管理时代,财务管理系统就是信息时代变革中的产物之一。任何系统都要遵循系统设计的基......
  • Java设计模式之单例模式
    一、何谓单例模式?单例模式,也叫单子模式,是一种常用的软件设计模式,属于创建型模式的一种。在应用这个模式时,单例对象的类必须保证只有一个实例存在。许多时候整个系统只需要拥有一个的全局对象,这样有利于我们协调系统整体的行为。比如在某个服务器程序中,该服务器的配置信息存放在一......