Skip to main content

系统日志

本系统的日志主要分三块:

  1. 以HTTP访问为视角的apache格式的log。
  2. 系统调试用的log(代码中输出到屏幕的一些log)
  3. 用户使用记录(提问了哪些问题,访问了哪些页面,后台编辑人员操作记录)
  4. 用户点赞/点踩反馈

背景知识:我们每一个项目都有一个项目id,可以通过在yiask的container里面运行echo $PROJECT查看。这个项目id是许多数据库、文件夹起名字的基础

1. 以HTTP访问为视角的apache格式的log

在yiask的container里面的/usr/src/app/logs/$PROJECT中。会按照天做rotation。当天的记录在access.log

注:我们一般在部署的时候,会将容器里面/usr/src/app/logs路径映射到物理机中,具体地址见docker-compose.yml文件中声明的内容

2. 系统调试用的log(代码中输出到屏幕的一些log)

在yiask的container里面的/usr/src/app/logs中。会按照天做rotation。当天的记录在out.log中,报错信息在err.log

注:我们一般在部署的时候,会将容器里面/usr/src/app/logs路径映射到物理机中,具体地址见docker-compose.yml文件中声明的内容

3. 用户使用记录(提问了哪些问题,访问了哪些页面,后台编辑人员操作记录)

此记录保存在mongodb中,路径如下:

  • database: website_$PROJECT
  • collection: logs

logs collection里面,以action用来区分用户行为

  • ask: 问答行为
  • visit: 访问行为
  • dashboard: 看板操作
  • edit_model: 后台编辑人员操作模型的记录
  • log: 系统log(和第二点的log一样,但是这里会自动清除3天前的log)

mongodb一般在同一台服务器上,也以docker的方式运行。容器名称一般为yiask_mongodb

4. 用户点赞/点踩反馈

此记录保存在mongodb中,路径如下:

  • database: website_$PROJECT
  • collection: feedbacks

mongodb一般在同一台服务器上,也以docker的方式运行。容器名称一般为yiask_mongodb

清理clickhouse log

clickhouse会将查询日志,度量日志和堆栈采集日志记录下来,存储到自身数据库的system库中, 如果长时间不清查,该表数据会一直累积。

查看system的每张表的占用空间大小:

SELECT 
table,
formatReadableSize(sum(bytes)) as size,
formatReadableSize(sum(primary_key_bytes_in_memory)) as primary_key_size,
sum(rows) as rows_count,
count() as parts_count
FROM system.parts
WHERE database = 'system' AND active
GROUP BY table
ORDER BY sum(bytes) DESC;

例子:

ALTER table `system`.query_log DELETE where 1=1;
ALTER table `system`.trace_log DELETE where 1=1;
ALTER table `system`.metric_log DELETE where 1=1;
ALTER table `system`.query_thread_log DELETE where 1=1;