1. 描述编辑
1.1 版本
报表服务器版本 | JAR 包版本 |
---|---|
10.0 | 2019-12-05 |
1.2 简介
为了加强对报表工程的管理,随时监控其运行状态,可以在平台中开启日志记录,如下图所示:
注:平台日志的设置仅影响系统日志的输出,不影响操作日志。
2. LogDB编辑
LogDB 是 FineReport 日志监控开启之后,用于保存日志的内置数据库,那么 FineReport 日志都包含哪些内容呢?
下面来介绍一下,LogDB 中各个数据表的含义以及字段的含义。
2.1 连接 LogDB 数据库
设计器菜单栏点击服务器>定义数据连接,新增一个 JDBC 数据连接,将其重命名为 LogDB,设置信息如下表所示:
选项 | 内容 |
---|---|
数据库 | Others |
驱动器 | com.fr.swift.jdbc.Driver |
URL | jdbc:swift:emb://default(Mac、Windows、Linux 通用) |
用户名和密码 | 空 |
设计器数据连接页面如下图所示:
2.2 查看数据表
测试链接成功之后,新建一个 数据库查询 方式的数据集,选择上面创建的数据连接,即可看到日志数据库下面的所有数据表,如下图所示:
注:如果是服务器添加了 LogDB 这个数据连接务必控制这个 数据连接的权限,否则存在被越权访问并修改配置数据库的风险。
查询语法可参见文末章节。
2.3 数据表和字段对应的含义
那么 Logdb 数据库中各个数据表和表字段其含义到底是怎么样的呢?
2.3.1 fine_record_execute
报表(BI)执行表:报表访问/导出/打印日志,即如果报表访问/导出/打印的时候,将会在该表中添加一条记录,并在相应字段中填写其对应的信息记录。
其各个字段对应的含义如下表所示:
字段 | 含义 |
---|---|
id | 主键 |
tname | 物理模板名字(reportlet 下的完整路径) |
displayName | 挂载到平台的目录名称(全路径),如果直接访问链接则为空 |
type | 报表访问方式,具体列举在下面的表格中(范围0~103,目前已使用33个编码) |
param | 参数 |
ip | 执行报表的 IP 地址 |
username | 执行报表的用户 |
userrole | 执行报表的用户角色 |
consume | 执行耗时,包括 SQL 执行时间,报表计算时间 |
time | 日志开始时间 |
sql | SQL 语句 |
sqlTime | SQL 执行的总时间 |
browser | 客户端访问报表所用的浏览器版本 |
memory | 报表占用内存,单位 B ①若因宕机等情况计算中断,记录的是报表开始计算到计算中断所占用的内存(根据格子数估算。一格子占用 0.2KB)。 同时很多时候当模板complete字段值为0时,这个里记录的是0 ②若计算完成,记录的数据除以200之后返回是报表开始计算到计算完成所生成的格子数。 |
reportID | 模板编号 |
userId | 用户 ID |
complete | 是否计算完成 ①若因宕机等情况计算中断,记录为“0”。 ②若计算完成,记录为“1”。 |
source | 访问方式(integration 是通过 URL 访问,single 是平台访问的 ) |
sessionID | 会话ID,用于与性能埋点表中(fine_intelli_consume_point)的前端渲染耗时相关埋点进行关联 |
注:userId、complete、visitType、resource 字段需要更新 2019-5-20 以后的 JAR。
字段 type 具体含义:
编码 | 类型 | markString |
---|---|---|
0 | 分页预览 | page |
1 | 在线分析 | view |
2 | 填报预览 | write |
3 | 决策报表预览 | form |
4 | 行式引擎 | layer |
5 | 在线编辑 | edit |
6 | 新填报 | write_plus |
10 | Excel 分页导出 | excel |
11 | Excel 原样导出 | excelO |
12 | Excel 整页导出 | excelL |
13 | Excel 分页分 sheet 导出 | excelS |
14 | PDF 导出 | |
15 | Word 导出 | word |
16 | SVG 导出 | svg |
17 | CSV 导出 | csv |
18 | 文本导出 | text |
19 | JPG 图片导出 | jpg |
20 | PNG 图片导出 | png |
21 | GIF 图片导出 | gif |
22 | BMP 图片导出 | bmp |
23 | WBMP 图片导出 | wbmp |
24 | 内置数据集导出模板 | cpt |
25 | HTML 导出 | html |
26 | 填报 HTML 导出 | write_html |
27 | BI 导出 Excel | |
30 | Flash 打印 | flash |
31 | PDF 打印 | |
32 | Applet 打印 | applet |
33 | 零客户端打印 | |
34 | 本地软件打印 | |
101 | BI 模板预览 | |
102 | BI 模板编辑 | |
103 | BI 模板分享 |
2.3.2 fine_record_login
登录表:用户登录日志,用于记录用户的登录信息。
其各个字段对应的含义如下表所示:
字段 | 含义 |
---|---|
time | 登录时间 |
ip | 登录 IP 地址 |
username | 登录的用户 |
userrole | 登录的用户角色 |
2.3.3 fine_record_email
邮件表:邮件发送日志(只包含工具栏中的“邮件”),即如果报表发送邮件的时候,将会在该表中添加一条记录,并在相应字段中填写其对应的信息记录。
其各个字段对应的含义如下表所示:
字段 | 含义 |
---|---|
receiver | 收件人用户名 |
收件人邮箱 | |
ip | 发送邮件的IP地址 |
username | 发送邮件的用户 |
tname | 物理模板名字(reportlet 下的完整路径) |
displayName | 挂载到平台的目录名称(全路径),如果直接访问链接则为空 |
content | 邮件内容 |
time | 发送时间 |
result | 是否发送成功 |
detail | 详情 |
2.3.4 fine_record_write
填报表:记录填报日志信息,即如果报表进行填报的时候,将会在该表中添加一条记录,并在相应字段中填写其对应的信息记录。
其各个字段对应的含义如下表所示:
字段 | 含义 |
---|---|
username | 填报报表的用户 |
tname | 物理模板名字(reportlet 下的完整路径) |
time | 填报时间 |
sql | SQL 语句 |
sqlTime | SQL 执行的总时间 |
result | 是否填报成功 |
ip | 填报报表的IP地址 |
displayName | 挂载到平台的目录名称(全路径),如果直接访问链接则为空 |
detail | 详情 |
browser | 客户端访问报表所用的浏览器版本 |
consume | 执行耗时,包括 SQL 执行时间,报表计算时间 |
2.3.5 fine_record_error
执行出错日志表:即如果报表执行的过程中报错的时候,将会在该表中添加一条记录,并在相应字段中填写其对应的信息记录,记录全部 error 和 fatal 级别的报错信息。
其各个字段对应的含义如下表所示:
字段 | 含义 |
---|---|
displayName | 挂载到平台的目录名称(全路径),如果直接访问链接则为空 |
ip | 执行报表的 IP 地址 |
msg | 错误信息 |
time | 出错记录时间 |
tname | 出错的物理模板名字(reportlet 下的完整路径) |
trace | 错误路径 |
username | 执行报表的用户 |
userrole | 执行报表的用户角色 |
errorcode | 错误码(无错误码时记为空) |
platformDisplay | 是否在平台中显示(1为是,0为否) 记录规则为:有记录到此表的错误日志,此字段记为1;反之此字段记为0。 |
注1:在平台日志的错误日志中过滤展示,只展示 platformDisplay=1 的记录。
注2:如果不是模板出错,则 tname 记录为“非模板触发错误”。
2.3.6 fine_record_param
常用参数组合表:记录常用参数组合日志信息。
其各个字段对应的含义如下表所示:
字段 | 含义 |
---|---|
templateid | 模板 ID |
username | 用户 |
pgroup | 参数(值以数组展示:参数 1:参数值,参数 2:参数值) |
time | 记录时间 |
2.3.7 fine_record_sms
短信发送表:记录短信发送日志信息,即如果发送短信的时候,将会在该表中添加一条记录,并在相应字段中填写其对应的信息记录.。
其各个字段对应的含义如下表所示:
字段 | 含义 |
---|---|
receiver | 收件人用户名 |
mobile | 接收人手机号 |
content | 邮件内容 |
time | 发送时间 |
result | 是否发送成功 |
detail | 详情 |
sender | 发件人用户名 |
2.3.8 fine_record_operate
管理日志表:即用户对模块进行操作的时候,将会在该表中添加一条记录,并在相应字段中填写其对应的信息记录。
其各个字段对应的含义如下表所示:
字段 | 含义 |
---|---|
type | 模块(存国际化的 key) |
item | 设置项 |
resource | 被访问资源 |
operation | 操作 |
username | 用户名 |
ip | 用户 IP 地址 |
time | 用户操作时间 |
detail | 详情 |
requestParam | 请求参数 |
2.3.9 fine_record_sql
SQL 执行表:记录 SQL 的执行情况。
其各个字段对应的含义如下表所示:
字段 | 含义 |
---|---|
columns | 数据集规模(列) |
dsname | 数据集的名称 |
executeid | 执行表 ID |
rows | 数据集规模(行) |
sqltime | SQL 执行时间,单位毫秒 |
connection | 数据连接名 |
connectionID | 数据连接标识ID:作用是与功能埋点表(fine_intelli_focus_point)中的数据源连接相关埋点进行关联,生成规则要与数据源连接埋点记录的数据连接标识相同 |
2.3.10 fine_intelli_focus_point
功能埋点表:用来保存所有公共的埋点信息。
其各个字段对应的含义如下表所示:
字段 | 含义 |
---|---|
id | 埋点 ID 编号 |
text | 记录的主要内容 |
source | 埋点来源 -1 表示没有定义来源(UNDEFINED) 1 是内置 JAR 包的功能点(EMBED) 2 是插件功能点(PLUGIN) 4 是 FineReport 的功能点(REPORT) 8 是 FineBI 的功能点(BI) |
time | 时间 |
username | 用户名 |
ip | 出发埋点的 IP |
title | 标题,埋点是什么 |
body | 一个 JSON 数据结构,根据功能点 ID 里面存放不同功能点的信息(次要信息,可能为空) |
字段 id 格式说明:
例如:FR-F1001
FR前缀,表示是FR的埋点。
第一位字母表示功能/性能:F-功能、P-性能。
第二位数字表示分类:1-数据源、2-前台、3-报错、4-智能运维、5-设计器。
表中字段 id 和 body 之间的关系如下表所示:
id | body | 作用 |
---|---|---|
FR-F1001 | id:数据连接标识 version:数据源版本 driver:连接驱动信息 times:使用次数 connecttime:创建连接的时间 | 用于记录数据连接相关的信息 |
FR-F3001 | 记录具体的报错堆栈 | 记录工程启动失败报错原因 |
FR-F4001 | 初版插件记录示例:{node:2,memory:16,situation:normal,inform:1,type:auto} node 为推荐节点数(推荐单机时记为1) memory 为推荐单机/单节点内存 situation 为推荐的情况:记为"normal"时为正常推荐,"error"时为推荐值异常情况,"inequacy"时为运行数据不足情况,"nonsupport"时为不支持推荐配置。其中"normal"情况下 node 与 memory 有值,其余情况 node 与 memory 记为空 inform 为是否进行了通知,记为1代表已通知,记为0代表未通知 type 为推荐的类型,记为"auto"为根据一自然日运行数据进行推荐的结果,记为"manual"为用户访问接口链接推荐的结果 | 内存配置推荐数值 |
FR-F4002 | 记录示例:{sessionid: xxxxxx, reason: release, detail: row count, load: high load, cell num: 100000, survival time: 600000} sessionid: 被清除的会话 id reason: 会话被清除的原因大类。包括 life(生命周期),limit(模板限制),release(智能释放)三项 detail: 会话被清除的详细原因
load: 会话被杀时的系统的负载状况。包括endanger(危险状态),terrible load(超高负载),high load(高负载),normal load(中低负载) cell num:已计算的单元格个数 survival time:存活时间 | 记录会话因生命周期、模板限制被清除以及高负载时停止计算的情况 |
FR-F4003 | 记录示例:{type: high load kill, kill num time: 50, kill num cell: 50, session num: 300, load: terrible load} type: 包括high load kill(小杀),terrible load kill(大杀),remove all(超杀清除所有会话) kill num time: 因未更新时间过长被杀的会话数,type 为 removeAll 时记为空 kill num cell: 因格子数过多被杀的会话数,type 为 removeAll 时记为空 kill num sum: 被杀的会话数求和 session num: 释放会话之前的会话总数 load: 会话被杀时的系统的负载状况。包括 endanger(危险状态),terrible load(超高负载),high load(高负载),normal load(中低负载) | 记录 GC 回调触发的释放会话情况 |
FR-F5001 | 记录示例:{disk_beforegc:50, disk_aftergc:50} | 记录模板版本管理 GC 清理情况 |
FR-F5002 | node:节点名 time:进程关闭时间 pid:进程 pid startTime:进程开始时间 upTime:进程持续时间 signalName:信号量 | 系统关闭记录:记录系统关闭前后的进程信息以及关闭类型 |
FR-F5003 | node:节点名 containerMem:容器设置的内存大小 cpu:CPU 核数 disk:磁盘总空间 diskUsed 磁盘已使用空间 jdkVersion:JDK 版本 containerVersion:Web容器版本 machineMem:物理机内存 system:服务器操作系统 systemNum:服务器操作系统位数 arch:处理器架构,如x86_64、x86 diskSpeed:磁盘存取速度 FRbuildNO:FR的 jar 包版本 BIbuildNO:BI 的 jar 包版本(记录 BI 的 jar 包版本,未使用 BI 则记为空) serverType:服务器类型(cloud代表云服务器,local代表本地服务器) gcType:垃圾收集器类型 | 容器配置情况:应用所在容器、服务器的配置信息。每日记录一次 |
FR-F5004 | licType:注册类型 expireTime:注册到期时间 CTRID:合同 ID companyId:公司 ID productVersion:产品版本 platformUserNum:用户人数 | 用户基本信息:用户的注册信息等内容。每日记录一次 |
FR-F5005 | tid:模板 ID tName:物理模板名字(reportlets下的完整路径) cNums:条件属性个数 formNums:公式个数 sheetNums:多 sheet 个数 dsNums:数据集个数 compFormNums:复杂公式的个数(包括层次坐标、SQL、Value公式) submitNums:内置提交的个数 isFrozen:是否使用了冻结 isFoldTree:是否使用了折叠树 widgetNums:控件个数 filterNums:过滤个数 injectNums:参数注入个数 formula:模板内公式使用情况 jsAPI:模板内JS API使用情况(限制记录为255字符) tSize:模板总大小 imgSize:模板里图片的大小 lineEngine :是否启用行式引擎(1为启用,0为未启用) execute0-execute4:执行时间的5级的分段记录 mem0-mem4:内存使用量的5级的分段记录 sql0-sql4:SQL 执行时间的5级的分段记录 | 模板属性信息:记录模板的各项信息,每张模板每日输出一条记录 |
FR-F5006 | id:数据在配置中的位置 value:数据值 | 配置信息:每日将 FineDB 中的 fine_conf_entity 表中的特定信息记录一次 |
FR-F5007 | plugin:插件名 version:插件版本 API:插件中所用接口情况 opration:插件运行情况 register:插件注册情况 enable:插件是否启用 | 插件使用情况:插件的使用情况,每个插件在每日记录一次 |
FR-F5008 | function:功能点购买情况 | 功能点购买情况:功能点购买情况,每日记录一次 |
2.3.11 fine_real_time_usage
应用实时情况表:记录应用实时情况。
其各个字段对应的含义如下表所示:
字段 | 含义 |
---|---|
node | 节点名 |
cpu | CPU 利用率 |
memory | 当前 JVM 内存情况 |
time | 记录时间,每分钟一条 |
sessionNum | 存活会话数 |
onlineNum | 系统在线人数 |
pid | 进程 PID |
templateRequest | 正在计算的模板请求数 |
httpRequest | 总的正在处理的http请求数 |
sessionRequest | 正在处理的带sessionid的请求数 |
注:node、sessionNum、onlineNum、pid 字段需要更新 2019-5-20 以后的 JAR
2.3.12 fine_function_possess
功能点购买情况表:功能点购买情况,每日记录一次。
其各个字段对应的含义如下表所示:
字段 | 备注 |
---|---|
time | 时间,到日 |
function | 功能点购买情况 |
2.3.13 fine_intelli_consume_point
性能信息表:记录性能相关信息。
其各个字段对应的含义如下表所示:
字段 | 说明 | 备注 |
---|---|---|
id | 埋点 id 编号 | |
source | 埋点来源 | Original 类里面 embed 表示当前系统的,plugin 表示插件的埋点,undefined 表示没有定义来源 |
time | 时间 | 开始时间 |
endTime | 结束时间 | |
consume | 耗时 单位 ms | |
memory | 内存大小 单位 byte | |
username | 操作者 | |
ip | 操作 IP | |
title | 资源 ID | 可以是模板 ID,分析表 ID,表 ID 等 |
text | 资源内容 | 可以是模板名字,分析表名字,等,可以根据 |
type | 操作类型 | 可以表明是进行了哪种操作 |
comment | 资源备注 | 可以是可以是更具体一些的信息,需要直接分析的数据。 |
body | 埋点具体信息 | 一个 JSON 数据结构,根据不同的埋点里面存放不同的信息 |
2.3.14 fine_record_gc
GC 记录表:记录系统的 GC 信息。
其各个字段对应的含义如下表所示:
字段 | 数据类型 & 单位 | 说明 |
---|---|---|
gcStartTime | long | GC 开始时间 |
gcType | String | GC 类型 |
gcCause | String | GC 的原因 |
pid | String | 进程 pid |
node | String | 用户命名的节点名,单机下记为空 |
duration | long ms | GC 持续时间 |
youngBeforeUsed | long KB | 年轻代 GC 前使用内存 |
youngBeforeCommitted | long KB | 年轻代 GC 前申请内存 |
youngAfterUsed | long KB | 年轻代 GC 后使用内存 |
youngAfterCommitted | long KB | 年轻代 GC 后申请内存 |
oldBeforeUsed | long KB | 老年代 GC 前使用内存 |
oldBeforeCommitted | long KB | 老年代 GC 前申请内存 |
oldAfterUsed | long KB | 老年代 GC 后使用内存 |
oldAfterCommitted | long KB | 老年代 GC 后申请内存 |
metaspaceBeforeUsed | long KB | metaspace GC 前使用内存 |
metaspaceBeforeCommitted | long KB | metaspace GC 前申请内存 |
metaspaceAfterUsed | long KB | metaspace GC 后使用内存 |
metaspaceAfterCommitted | long KB | metaspace GC 后申请内存 |
heapBeforeUsed | long KB | GC 前堆使用内存 |
heapBeforeCommitted | long KB | GC 后堆申请内存 |
heapAfterUsed | long KB | GC 前堆使用内存 |
heapAfterCommitted | long KB | GC 后堆申请内存 |
balancePromoterScore | int 分「分值的分」 | 中止分值 |
releasePromoterScore | 同上 | 释放分值 |
loadScore | 同上 | 整体负载分值 |
3. 查询语法编辑
3.1 明细查询
SQL 语句示例:
1)select * from fine_record_execute
2)select tname, displayName, consume from fine_record_execute
3.2 group by 查询
GROUP BY 查询,有 SUM,COUNT, MAX, MIN, AVG 这五种聚合方式,如果什么都不写,会默认 COUNT
SQL 语句示例:
1)select sum(consume) from fine_record_execute group by tname, displayName
2)select consume from fine_record_execute group by tname, displayName
3)select min(consume), max(consume) from fine_record_execute group by tname, displayName
3.3 where 过滤条件
简单的 WHERE 过滤条件,支持 AND, OR, =,<>,>,>=, <,<=, in, isnull
SQL 语句示例:
1)select * from fine_record_execute where consume > 10
2)select sum(consume) from fine_record_execute where consume > 10 and consume < 100 group by tname, displayName
3)select consume from fine_record_execute where tname = `doc/Advanced/Chart/GraphSwitching/多图表实现统一切换.frm`
4)select sum(consume) from fine_record_execute where tname in (`doc/Advanced/Chart/GraphSwitching/多图表实现统一切换.frm`, `doc/Advanced/Chart/Combination/柱形-面积组合图.cpt`) group by tname, displayName
3.4 todate() 将时间戳转换为普通的日期类型
todate() 结果的日期格式为:2018-12-18 10:15:26
SQL 语句示例:
1) select todate(time) from fine_record_execute
2) select * from fine_record_execute where todate(time)<'2018-12-18 10:15:26' and todate(time)>'2018-12-17 10:15:26'
注: 需要更新 2019-5-20 以后的 JAR。
3.5 like 模糊查询
只支持前后‘%’的用法
SQL 语句示例:
1)select * from fine_record_execute where tname like '%demo%'
注:目前只支持 '%',暂不支持通配符 ‘_’,需要更新 2019-5-20 以后的 JAR。