728x90
반응형

Overview

미들웨어, 데이터 베이스등과 같은 시스템을 운영하다보면 로그 레벨을 동적으로 변경해야되는 때가 많다. 그럴때마다 설정 파일을 변경하면서 시스템을 내렸다 올렸다는 일은 여간 까다롭거나 비용이 많이 드는 일이 아닐 수 없다. 다행히 Milvus에서는 이런 로그 레벨 수준으로 동적으로 변경 가능하도록 API 제공해주고 있다.

https://medium.com/vector-database/dynamically-change-log-levels-in-the-milvus-vector-database-252d467e5052

 

Dynamically Change Log Levels in the Milvus Vector Database

The Milvus vector database adopts the zap logger open sourced by Uber to support dynamically changing log levels while the Milvus service is running.

medium.com

 

로그 레벨을 이제 동적으로 변경해보자

1. 로그 레벨을 error 로 변경해보자.

[root@localhost ~]# curl -X PUT localhost:9091/log/level -d level=error
{"level":"error"}

마지막 로그 이후에 출력이 멈춘 것을 볼 수 있다.

[root@localhost ~]# docker logs -f 4b2806e514a1
...

2. error 로그를 출력하기 위해서 etcd, minio container를 한번 내려보자

[root@localhost ~]# docker ps
CONTAINER ID   IMAGE                                      COMMAND                  CREATED          STATUS                    PORTS                                                                                      NAMES
4b2806e514a1   milvusdb/milvus:v2.2.11                    "/tini -- milvus run…"   45 minutes ago   Up 45 minutes             0.0.0.0:9091->9091/tcp, :::9091->9091/tcp, 0.0.0.0:19530->19530/tcp, :::19530->19530/tcp   milvus-standalone
53e9f0029dad   minio/minio:RELEASE.2023-03-20T20-16-18Z   "/usr/bin/docker-ent…"   45 minutes ago   Up 45 minutes (healthy)   9000/tcp                                                                                   milvus-minio
c4cb4680b4b7   quay.io/coreos/etcd:v3.5.5                 "etcd -advertise-cli…"   45 minutes ago   Up 45 minutes             2379-2380/tcp 

[root@localhost ~]# docker stop 53e9f0029dad
53e9f0029dad

[root@localhost ~]# docker stop c4cb4680b4b7
c4cb4680b4b7

아래와 같이 로그가 error 로그가 출력되는 것을 볼 수 있다.

[2023/07/12 04:19:32.946 +00:00] [ERROR] [config/etcd_source.go:151] ["can not pull configs"] [error="context deadline exceeded"] [stack="github.com/milvus-io/milvus/internal/config.(*EtcdSource).refreshConfigurationsPeriodically\n\t/go/src/github.com/milvus-io/milvus/internal/config/etcd_source.go:151"]
[2023/07/12 04:19:32.946 +00:00] [ERROR] [config/etcd_source.go:151] ["can not pull configs"] [error="context deadline exceeded"] [stack="github.com/milvus-io/milvus/internal/config.(*EtcdSource).refreshConfigurationsPeriodically\n\t/go/src/github.com/milvus-io/milvus/internal/config/etcd_source.go:151"]
{"level":"warn","ts":"2023-07-12T04:19:32.946Z","logger":"etcd-client","caller":"v3@v3.5.5/retry_interceptor.go:62","msg":"retrying of unary invoker failed","target":"etcd-endpoints://0xc000511dc0/etcd:2379","attempt":0,"error":"rpc error: code = DeadlineExceeded desc = latest balancer error: last connection error: connection error: desc = \"transport: Error while dialing dial tcp: lookup etcd on 127.0.0.11:53: no such host\""}
{"level":"warn","ts":"2023-07-12T04:19:32.946Z","logger":"etcd-client","caller":"v3@v3.5.5/retry_interceptor.go:62","msg":"retrying of unary invoker failed","target":"etcd-endpoints://0xc0027601c0/etcd:2379","attempt":0,"error":"rpc error: code = DeadlineExceeded desc = latest balancer error: last connection error: connection error: desc = \"transport: Error while dialing dial tcp: lookup etcd on 127.0.0.11:53: no such host\""}

 

 

디폴트 로그 레벨은 INFO이다 (?)

위에 링크된 블로그 공식 사이트를 들어가보면 Milvus는 기본적으로 INFO 레벨 수준을 출력한다고 기재되어 있다.

정말 그런것일까 증명해보자.

docker-compose로 milvus standalone 설치

[root@localhost ~]# docker ps
CONTAINER ID   IMAGE                                      COMMAND                  CREATED          STATUS                    PORTS                                                                                      NAMES
4b2806e514a1   milvusdb/milvus:v2.2.11                    "/tini -- milvus run…"   45 minutes ago   Up 45 minutes             0.0.0.0:9091->9091/tcp, :::9091->9091/tcp, 0.0.0.0:19530->19530/tcp, :::19530->19530/tcp   milvus-standalone
53e9f0029dad   minio/minio:RELEASE.2023-03-20T20-16-18Z   "/usr/bin/docker-ent…"   45 minutes ago   Up 45 minutes (healthy)   9000/tcp                                                                                   milvus-minio
c4cb4680b4b7   quay.io/coreos/etcd:v3.5.5

출력 로그를 확인해보자

엥? DEBUG까지 출력을 하고 있다. INFO가 디폴트 설정으로 되어 있다는 것은 저 링크가 업데이트가 되지 않았거나 버전 차이일 수도 있다.

[root@localhost ~]# docker logs 4b2806e514a
...
[2023/07/12 03:11:31.579 +00:00] [INFO] [paramtable/hook_config.go:19] ["hook config"] [hook={}]
[2023/07/12 03:11:31.579 +00:00] [INFO] [config/etcd_source.go:145] ["start refreshing configurations"]
[2023/07/12 03:11:31.584 +00:00] [DEBUG] [paramtable/grpc_param.go:238] ["Init client max send size"] [role=indexcoord] [grpc.clientMaxSendSize=104857600]
[2023/07/12 03:11:31.584 +00:00] [DEBUG] [paramtable/grpc_param.go:238] ["Init client max recv size"] [role=indexcoord] [grpc.clientMaxRecvSize=104857600]
...

 

설정 파일을 확인해보자

docker container안에 들어가서 설정 파일을 출력해보면 etcd는 log레벨이 info로 되어 있지만 시스템 로그 설정은 기본적으로 debug로 되어있다. 영구적으로 변경하기 위해서는 container에 설정 파일을 volumne으로 연결해서로그 레벨을 변경해야할 것이다.

[root@localhost ~]# docker exec -it 4b2806e514a1 /bin/bash
root@4b2806e514a1:/milvus# cat configs/milvus.yaml 

# Related configuration of etcd, used to store Milvus metadata & service discovery.
etcd:
  endpoints:
    - localhost:2379
  rootPath: by-dev # The root path where data is stored in etcd
  metaSubPath: meta # metaRootPath = rootPath + '/' + metaSubPath
  kvSubPath: kv # kvRootPath = rootPath + '/' + kvSubPath
  log:
    # path is one of:
    #  - "default" as os.Stderr,
    #  - "stderr" as os.Stderr,
    #  - "stdout" as os.Stdout,
    #  - file path to append server logs to.
    # please adjust in embedded Milvus: /tmp/milvus/logs/etcd.log
    path: stdout
    level: info # Only supports debug, info, warn, error, panic, or fatal. Default 'info'.
...    

# Configures the system log output.
log:
  level: debug # Only supports debug, info, warn, error, panic, or fatal. Default 'info'.
  stdout: "true" # default true, print log to stdout
  file:
    # please adjust in embedded Milvus: /tmp/milvus/logs
    rootPath: "" # root dir path to put logs, default "" means no log file will print
    maxSize: 300 # MB
    maxAge: 10 # Maximum time for log retention in day.
    maxBackups: 20
  format: text # text/json

 

 

 

728x90
반응형