木叉博客


  • 首页

  • 归档

  • 搜索

自制单机日志解决方案 5. Talog 的应用(V.Talog.Server 的功能介绍)

时间: 2023-02-27 字数: 1445 字 阅读: 3分钟 阅读次数:

在本项目立项之时,我的目标就是做一个单机日志解决方案,不仅要有日志存储、查询功能,还要能记录 PageView、Metrics。前面介绍的内容只是说明了日志存储、查询是如何运作的,并还未达到最终的目标,而 V.Talog.Server 就是基于 Talog 开发的最终项目成品。

V.Talog.Server

V.Talog.Server 的目标是希望做成一个接口平台,通过调用接口来保存日志、记录 PageView、记录 Metrics,同时还能集成一个后台管理页面,以供查询数据。

目前 V.Talog.Server 具有以下几个功能:

  • 监听本地日志文件,该功能适用于将 Talog 与其他服务部署在同一台机器的情况
  • 日志索引、日志查询
  • 记录、查看 PageView
  • 记录、查看 Metrics

监听本地日志文件

考虑到用户可能已经有一些服务日志存储在本地文件中,因此 V.Talog.Server 添加了一个监听本地日志文件的功能。要启用该功能,只需要在 appsettings.json 文件中添加以下配置。

"Logs": [
    {
      "Path": "/var/log/nginx",
      "Filter": "access.log",
      "Index": "nginx",
      "Tags": {
        "type": "access"
      },
      "Type": 1
    },
    {
      "Path": "/var/log/nginx",
      "Filter": "error.log",
      "Index": "nginx",
      "Tags": {
        "type": "error"
      },
      "Type": 1
    }
]

Path 代表需要监听的目录;Filter 用于筛选出想要监听的文件,本质上为正则表达式,例如以上配置只监听了 access.log、error.log 两个文件,如果想要监听所有文件可以配置 .*;Tags 用于配置日志所对应的标签;Type 用于标识日志为单行或者多行,0 代表单行日志,1 代表多行日志;还有个 Head 字段,该字段用于指定多行日志的自定义头。

对于新加入监听列表的文件,V.Talog.Server 会将整个文件的日志都进行一次索引,并且记录下文件的末尾位置。当文件有发生变化时,V.Talog.Server 会从之前记录的位置继续读取日志,而不会从头开始读取,就算程序中断了也是如此,因为 V.Talog.Server 会将每个文件的已读位置记录在文件中。

日志索引、日志查询

V.Talog.Server 作为一个日志解决方案,提供了 API 接口以供其他程序上传日志,也提供了一个后台管理页面,以供用户在遇到问题时,可以快速查看日志。

POST /log/index

日志索引接口

Request:
{
    "index": "",
    "tags": {
        "key1": "value1",
        "key2": "value2"
    },
    "data": [
        "log1",
        "log2"
    ],
    "type": 1, // 0 单行日志(json 日志也属于单行日志) 1 多行日志
    "head": "" // 多行日志需要设置一个自定义头,若该参数为空,则以 Index 替代
}
POST /log/search?page=1&perPage=10

日志查询接口,支持分页,page 从 1 开始

Request:
{
    "index": "",
    "tagQuery": "", // 标签查询表达式,语法参考 V.QueryParser
    "regex": "", // 正则表达式,若该参数不为空,则认为日志为非 json 格式进行处理,只会返回与之匹配的日志
    "fieldQuery": "", // 字段筛选,若 regex 不为空,则基于正则字段筛选,若 regex 为空,则认为日志为 json 格式,基于 json 字段筛选
    "sort": "" // 排序规则,type asc then date desc then ...
}

Response:
{
	"data": {
		"total": 1, // 查询到的日志总数
		"items": [ // 日志数组
            {
                "groups": { // 当请求参数中 regex 生效时,会返回 groups 字段,表示匹配到的正则字段
                    "date": "29/Nov/2022:09:14:07 +0800",
                    "method": "POST",
                    "path": "/talog/log/remove",
                    "schema": "HTTP/1.1",
                    "code": "200",
                    "length": "31",
                    "reference": "https://vbranch.cn/talog/index.html",
                    "agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36"
                },
                "tags": [{ // 每一条日志的标签数组
                    "label": "additionalProp1",
                    "value": "string"
                }],
                "data": { // data 字段大部分情况下会直接返回日志字符串,但是当 regex 为空,并且 FieldQuery 或 sort 字段不为空时,会认为日志为 json 格式,此时返回的 data 字段会是一个 json 对象
                    "key": "value"
                }
            }
        ]
	},
	"code": 0, // 0 正常,其他情况为不正常
	"msg": null // 当 code 不为 0 时,msg 返回错误信息
}
后台页面查询日志

Talog 查询日志

记录、查看 PageView

PageView 也是同样的,提供一个上传数据的 API 接口,以及一个后台查看页面。

GET /metric/pg/add?index=xxx&page=xxx&user=xxx

Page View 接口,index、page 都是必传参数,user 非必传,user 用于统计 UV

后台页面查看 PageView

Talog PageView

记录、查看 Metrics

GET /metric/add?index=xxx&name=xxx&value=xxx

指标接口,name 为指标名称(如 cpu、memory),value 为指标值

后台页面查看 Metrics

Talog Metric

最后

本文列举了 V.Talog.Server 的功能,功能较少但是对于我个人来说已经够用了,我一开始也提到过,我是在看到了其他项目功能特别简洁,才萌生自己做一个简易的日志解决方案。若是像 elasticsearch 那种功能强大的项目,我肯定是做不来分毫的。下一篇文章将会介绍一下 V.Talog.Server 的搭建过程。

#日志解决方案# #Talog#
QQ扫一扫交流

标题:自制单机日志解决方案 5. Talog 的应用(V.Talog.Server 的功能介绍)

链接:/post/v-talog-5/

作者:Venyo Wong

声明: 本博客文章除特别声明外,均采用 CC BY-NC-SA 3.0许可协议,转载请注明出处!

创作实属不易,如有帮助,那就打赏博主些许茶钱吧 ^_^
WeChat Pay

微信打赏

Alipay

支付宝打赏

自制单机日志解决方案 6. V.Talog.Server 的搭建与使用
自制单机日志解决方案 4. 扩展日志查询功能
Venyo Wong

Venyo Wong

Hou tui, wo yao kai shi zhuang bi le.

26 日志
0 分类
23 标签
GitHub
友情链接
© 2010 - 2024 木叉博客
Powered by - Hugo v0.120.4 / Theme by - NexT
Storage by Github / 闽ICP备2023011022号-2
0%