Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

add audit log #1614

Merged
merged 8 commits into from
Apr 7, 2022
Merged
Show file tree
Hide file tree
Changes from 7 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -99,6 +99,10 @@ Graph 服务提供了两份初始配置文件`nebula-graphd.conf.default`和`neb
| ------------------- | ------------------------ | ------------------------------------------ |
| `system_memory_high_watermark_ratio` | `0.8` |内存高水位报警机制的触发阈值。系统内存占用率高于该值会触发报警机制,Nebula Graph 会停止接受查询。|

## audit 配置

仅 Nebula Graph 企业版支持审计日志功能。详细参数说明参见[审计日志](2.log-management/audit-log.md)。

## metrics 配置

| 名称 | 预设值 | 说明 |
Expand Down
99 changes: 99 additions & 0 deletions docs-2.0/5.configurations-and-logs/2.log-management/audit-log.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,99 @@
# 审计日志

Nebula Graph 的审计日志功能可以将 Graph 服务接受到的所有操作进行分类存储,用户可以根据需要,追踪指定类型的操作。

!!! enterpriseonly

仅企业版支持本功能。

## 日志类别

|类别|语句|说明|
|:--|:--|:--|
|`login` |-| 客户端尝试连接 Graph 服务时,记录相关信息。 |
|`exit` |-| 断开与 Graph 服务的连接时,记录相关信息。 |
|`ddl` |`CREATE SPACE`、`DROP SPACE`、`CREATE TAG`、`DROP TAG`、`ALTER TAG`、`DELETE TAG`、`CREATE EDGE`、`DROP EDGE`、`ALTER EDGE`、`CREATE INDEX`、`REBUILD INDEX`、`DROP INDEX`、`CREATE FULLTEXT INDEX`、`REBUILD FULLTEXT INDEX`、`DROP FULLTEXT INDEX`|记录 DDL 语句的信息。 |
|`dql` |`MATCH`、`LOOKUP`、`GO`、`FETCH`、`GET SUBGRAPH`、`FIND PATH`、`UNWIND`、`GROUP BY`、`ORDER BY`、`YIELD`、`LIMIT`、`RETURN`|记录 DQL 语句的信息。|
|`dml` |`INSERT VERTEX`、`DELETE VERTEX`、`UPDATE VERTEX`、`UPSERT VERTEX`、`INSERT EDGE`、`DELETE EDGE`、`UPDATE EDGE`、`UPSERT EDGE`|记录 DML 语句的信息。 |
|`dcl`|`CREATE USER`、`GRANT ROLE`、`REVOKE ROLE`、`CHANGE PASSWORD`、`ALTER USER`、`DROP USER`、`CREATE SNAPSHOT`、`DROP SNAPSHOT`、`ADD LISTENER`、`REMOVE LISTENER`、`BALANCE`、`SUBMIT JOB`、`STOP JOB`、`RECOVER JOB`、`ADD DRAINER`、`REMOVE DRAINER`|记录 DCL 语句的信息。|
|`util`|`SHOW HOSTS`、`SHOW USERS`、`SHOW ROLES`、`SHOW SNAPSHOTS`、`SHOW SPACES`、`SHOW PARTS`、`SHOW TAGS`、`SHOW EDGES`、`SHOW INDEXES`、`SHOW CREATE SPACE`、`SHOW CREATE TAG/EDGE`、`SHOW CREATE INDEX`、`SHOW INDEX STATUS`、`SHOW LISTENER`、`SHOW TEXT SEARCH CLIENTS`、`SHOW DRAINER CLIENTS`、`SHOW FULLTEXT INDEXES`、`SHOW CONFIGS`、`SHOW CHARSET`、`SHOW COLLATION`、`SHOW STATS`、`SHOW SESSIONS`、`SHOW META LEADER`、`SHOW DRAINERS`、`SHOW QUERIES`、`SHOW JOB`、`SHOW JOBS`、`DESCRIBE INDEX`、`DESCRIBE EDGE`、`DESCRIBE TAG`、`DESCRIBE SPACE`、`DESCRIBE USER`、`USE SPACE`、`SIGN IN TEXT SERVICE`、`SIGN OUT TEXT SERVICE`、`SIGN IN DRAINER SERVICE`、`SIGN OUT DRAINER SERVICE`、`EXPLAIN`、`PROFILE`、`KILL QUERY`、`DOWNLOAD HDFS`、`INGEST`|记录工具类语句的信息。 |
|`unknown`|-|记录未能识别的语句。|

## 设置审计日志

使用审计日志需要修改集群内的所有 Graph 服务的配置(`nebula-graphd.conf`),默认路径为`/usr/local/nebula/etc/nebula-graphd.conf`。

!!! note

修改配置后,需要重启 Graph 服务才能生效。

与审计日志相关的参数说明如下。

|参数|预设值|说明|
|:--|:--|:--|
| `enable_audit` | `false` | 是否开启审计日志。 |
| `audit_log_handler` | `file` | 审计日志的存储方案。可选值为`file`(本地文件)和`es`(Elasticsearch)。 |
| `audit_log_file` | `./logs/audit/audit.log` | 仅在`audit_log_handler=file`时生效。审计日志的存储路径,支持相对路径或绝对路径。 |
| `audit_log_strategy` | `synchronous` | 仅在`audit_log_handler=file`时生效。审计日志的同步方案。可选值为`asynchronous`和`synchronous`。设置为`asynchronous`时,日志事件使用内存缓冲,不会阻塞主线程,但是可能会因为缓存不够而导致日志缺失;设置为`synchronous`时,日志事件每次都刷新并同步到文件中。 |
| `audit_log_max_buffer_size` | `1048576` |仅在`audit_log_handler=file`、`audit_log_strategy=asynchronous`时生效。审计日志的缓存大小。单位:字节。 |
| `audit_log_format` | `xml` | 仅在`audit_log_handler=file`时生效。审计日志的格式。可选值为`xml`、`json`和`csv`。 |
| `audit_log_es_address` | - | 仅在`audit_log_handler=es`时生效。Elasticsearch 服务器的地址。格式为`IP1:port1, IP2:port2, ...`。 |
| `audit_log_es_user` | - | 仅在`audit_log_handler=es`时生效。登录 Elasticsearch 服务器的用户名。 |
| `audit_log_es_password` | - | 仅在`audit_log_handler=es`时生效。Elasticsearch 用户名对应的密码。 |
| `audit_log_es_batch_size` | `1000` | 仅在`audit_log_handler=es`时生效。每次发送至 Elasticsearch 服务器的日志条数。 |
| `audit_log_exclude_spaces` | - | 不需要记录日志的图空间列表。多个图空间用英文逗号(,)分隔。 |
| `audit_log_categories` | `login,exit` | 需要记录日志的分类列表。多个类别用英文逗号(,)分隔。 |
| | | |

## 审计日志格式

不同的存储方案和不同的格式,日志内的字段是相同的。以默认路径(`logs/audit/audit.log`)和默认 XML 格式为例说明各个字段的含义。

```bash
<AUDIT_RECORD
CATEGORY="util"
TIMESTAMP="2022-04-07 02:31:38"
TERMINAL=""
CONNECTION_ID="1649298693144580"
CONNECTION_STATUS="0"
CONNECTION_MESSAGE=""
USER="root"
CLIENT_HOST="127.0.0.1"
HOST="192.168.8.111"
SPACE=""
QUERY="use basketballplayer1"
QUERY_STATUS="-1005"
QUERY_MESSAGE="SpaceNotFound: "
/>
<AUDIT_RECORD
CATEGORY="util"
TIMESTAMP="2022-04-07 02:31:39"
TERMINAL=""
CONNECTION_ID="1649298693144580"
CONNECTION_STATUS="0"
CONNECTION_MESSAGE=""
USER="root"
CLIENT_HOST="127.0.0.1"
HOST="192.168.8.111"
SPACE=""
QUERY="use basketballplayer"
QUERY_STATUS="0"
QUERY_MESSAGE=""
/>
```

|字段|说明|
|:--|:--|
|`CATEGORY`| 日志类别。|
|`TIMESTAMP`| 日志生成时间。 |
|`TERMINAL`| 保留字段,暂不支持。|
|`CONNECTION_ID`| 连接的会话ID。 |
|`CONNECTION_STATUS`| 连接的状态码。`0`表示成功,其他数字代表不同的错误信息。|
|`CONNECTION_MESSAGE`| 如果连接出错,会显示报错信息。|
|`USER`| 连接的用户名。 |
|`CLIENT_HOST`| 客户端的 IP 地址。 |
|`HOST`| 连接的机器的 IP 地址。 |
|`SPACE`| 执行查询的图空间。|
|`QUERY`| 查询语句。|
|`QUERY_STATUS`| 查询状态。`0`表示成功,其他数字代表不同的错误信息。|
|`QUERY_MESSAGE`| 如果查询出错,会显示报错信息。|
4 changes: 2 additions & 2 deletions docs-2.0/5.configurations-and-logs/2.log-management/logs.md
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
# 日志配置

Nebula Graph 使用 [glog](https://github.com/google/glog) 打印日志,使用 [gflags](https://gflags.github.io/gflags/) 控制日志级别,并在运行时通过 HTTP 接口动态修改日志级别,方便跟踪问题。
Nebula Graph 默认使用 [glog](https://github.com/google/glog) 打印日志,使用 [gflags](https://gflags.github.io/gflags/) 控制日志级别,并在运行时通过 HTTP 接口动态修改日志级别,方便跟踪问题。

Nebula Graph 企业版还支持审计日志
randomJoe211 marked this conversation as resolved.
Show resolved Hide resolved
## 日志目录

日志的默认目录为`/usr/local/nebula/logs/`。

如果在 Nebula Graph 运行过程中删除日志目录,日志不会继续打印,但是不会影响业务。重启服务可以恢复正常。

## 配置说明

- `minloglevel`:最小日志级别,即不会记录低于这个级别的日志。可选值为`0`(INFO)、`1`(WARNING)、`2`(ERROR)、`3`(FATAL)。建议在调试时设置为`0`,生产环境中设置为`1`。如果设置为`4`,Nebula Graph 不会记录任何日志。

- `v`:日志详细级别,值越大,日志记录越详细。可选值为`0`、`1`、`2`、`3`。
Expand Down
1 change: 1 addition & 0 deletions mkdocs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -328,6 +328,7 @@ nav:
- Linux 内核配置: 5.configurations-and-logs/1.configurations/6.kernel-config.md
- 日志:
- 日志配置: 5.configurations-and-logs/2.log-management/logs.md
- 审计日志(企业版): 5.configurations-and-logs/2.log-management/audit-log.md

- 监控:
- 查询 Nebula Graph 监控指标: 6.monitor-and-metrics/1.query-performance-metrics.md
Expand Down