# 服务调用统计
# 功能入口
【数据服务】-【服务管理】-【服务调用统计】
# 功能概述
服务引擎记录了所有服务调用的日志信息,默认存放在服务引擎logs目录下的api.log文件。 目前记录的内容包括服务调用信息(调用时间、调用地址、调用服务名称、调用服务ID)、授权方信息(授权账号、授权部门、授权应用等),目前出于安全考虑,日志中不包含服务的调用的具体入参和出参信息。
# 前提条件
需要安装filebeat+logstash组件,采集服务日志并将服务信息存入elasticsearch。其中filebeat组件需要和服务引擎后端进程安装在同一台服务器上,如果采用集群方式安全,则每个服务引擎所在的服务器都需要安装,并指定具体的采集日志路径。
服务引擎的服务调用日志默认记录在服务引擎server的logs目录下,名称为api.log*。
以下配置可作为参考,可以根据实际情况调整。配置中是通过filebeat直接往logstash推送日志数据,如果考虑高并发场景,可以引入kafka,实现filebeat->kafka->logstash->elasticsearch的日志采集链路。
filebeat模版:
filebeat.inputs:
- type: log
paths: ['/opt/dataEngine/logs/api.log*']
encoding: UTF-8
fields:
log-type: api-log
tags: ['api-log']
exclude_files: ['.gz$']
json.keys_under_root: true
json.add_error_key: true
json.overwrite_keys: true
output:
logstash:
hosts: ['127.0.0.1:5044']
logstash配置文件:
input {
beats {
port => 5044
}
}
filter {
date {
match => [ "time", "UNIX_MS" ]
locale => "cn"
timezone => "Asia/Shanghai"
target => "covert-time"
}
# calculate time UTC + 8h -> Asia/Shanghai
ruby {
code => "event.set('covert-time', event.get('covert-time').time.localtime + 8*60*60)"
}
mutate {
convert => ["covert-time", "string"]
}
# -----
# replace logstash @timestamp with log timestamp, and output.elasticsearch create index use this time
# -----
date {
match => [ "covert-time", "YYYY-MM-dd'T'HH:mm:ss.SSSZ", "ISO8601" ]
locale => "cn"
timezone => "Asia/Shanghai"
}
}
output {
elasticsearch {
hosts => ["127.0.0.1:9200"]
# 默认按天创建index,例如api-log-2023.01.03
index => "%{[fields][log-type]}-%{+YYYY.MM.dd}"
document_type => "log"
}
}
服务日志数据格式如下:
{
"_index": "api-log-2023.01.03",
"_type": "QV6ouIUBRRLTd81_lFnE",
"_id": "wu__tYYBGYJzibDjTZJC",
"_score": 1.0,
"_source": {
"tags": [
"api-log",
"beats_input_raw_event"
],
"ok": true,
"time": 1672733243440,
"@version": "1",
"covert-time": "2023-01-03T16:07:23.440Z",//调用时间
"ecs": {
"version": "1.0.0"
},
"path": "/api/sql-services/Test22/query",//调用服务地址
"method": "POST",
"pattern": "/api/sql-services/{id}/query",
"input": {
"type": "log"
},
"name": "RCM_TEST",//调用服务名称
"fields": {
"log-type": "api-log"
},
"agent": {
"version": "7.0.0",
"id": "ac7dfc12-cae7-41db-8ed5-48ff522f8e83",
"ephemeral_id": "32707110-c4a0-447f-bcaa-e2f7bda0d052",
"hostname": "localhost.localdomain",
"type": "filebeat"
},
"log": {
"offset": 245,
"file": {
"path": "/opt/ems/server/dataEngine/logs/api.log"
}
},
"host": {
"name": "localhost.localdomain"
},
"client": "acba7b4446184eeeb8550b9569538abe",//授权账号
"org": "",//授权部门
"serviceId": "Test22",//调用服务ID
"elapsed": 98,
"app": ""//授权应用
}
}