ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

ScyllaDB Nodetool setlogginglevel 命令详解:运行时动态调整日志级别

ScyllaDB Nodetool setlogginglevel 命令详解:运行时动态调整日志级别 ScyllaDB Nodetool setlogginglevel 命令详解运行时动态调整日志级别【免费下载链接】scylladbNoSQL data store using the Seastar framework, compatible with Apache Cassandra and Amazon DynamoDB项目地址: https://gitcode.com/GitHub_Trending/sc/scylladb导读nodetool setlogginglevel是 ScyllaDB 提供的运行时日志调优命令允许运维人员在不重启节点的情况下针对某个具体日志类logger class如paging、sstable、cql_server临时调整日志输出阈值从而精准定位线上问题。本文将完整讲解该命令的语法、可用日志级别与日志类清单并结合仓库源码剖析其底层 REST API 调用链同时给出离线场景下的等价配置方案帮助读者在诊断 ScyllaDB 故障时做到按需取证、用完即还原。命令概述与语法根据官方文档 setlogginglevel.rst该命令用于在运行时runtime为指定的组件或类设置日志级别阈值。其基本语法为nodetool setlogginglevel class level其中class是需要调整日志级别的具体日志类名称level是下文列出的日志级别之一。例如将paging类的日志级别设置为tracenodetool setlogginglevel paging trace命令执行后立即生效无需重启 ScyllaDB 进程也不会中断正在进行的读写服务非常适合在生产集群上临时采集某个模块的详细日志。关于无参数重置的说明原文档提到如果调用该命令时不带任何参数日志级别将被重置为初始配置。但从当前仓库的源码实现看这一行为已被调整在 tools/scylla-nodetool.cc#L2325-L2330 中setlogginglevel_operation会强制校验logger与level两个参数缺少任一参数都会抛出std::invalid_argument提示 resetting logger(s) is not supported yet, the logger and level parameters are required重置日志器暂不支持logger 和 level 参数为必填。命令的帮助文本见 tools/scylla-nodetool.cc#L5003-L5016也明确标注了这一点。因此在实际使用时请务必同时提供 logger 与 level 两个参数不要依赖空参数重置这一过时行为。参数详解该命令实际接受两个具名参数其定义位于 tools/scylla-nodetool.cc#L5013-L5016参数说明备注--logger要设置日志级别的日志器logger名称必填可通过scylla --help-loggers查询完整清单--level要设置的日志级别必填取值为trace、debug、info、warn、error之一注意在 tools/scylla-nodetool.cc#L5008 的帮助文本中参数描述曾提到如果未指定 logger则所有日志器重置为默认级别如果未指定 level则恢复默认日志级别这与上述实现中必填校验存在出入——以当前源码的强校验逻辑为准。日志级别Log LevelsScyllaDB 的日志级别与 Seastar 框架的标准级别对齐按严重程度与详细程度从高到低排列如下级别含义典型使用场景trace最详细的跟踪日志极短时间的问题复现如定位分页、查询路由细节debug调试日志临时排查模块内部状态info信息日志默认级别正常运行时的标准输出warn警告日志关注潜在风险但不阻断运行的事件error错误日志仅记录明确失败的事件原文档特别强调使用trace或debug级别会产生非常大的日志文件读者可能反而在大量日志中找不到想要的内容。建议只在很短时间内开启这两个级别或者配合 ScyllaDB 支持团队一起使用定位完成后应立即恢复为info。日志类清单Log ClassesScyllaDB 内部按子系统划分了大量日志类logger每个类对应一条相对独立的日志通道。例如paging对应查询分页子系统sstable对应 SSTable 读写cql_server对应 CQL 协议服务raft对应 Raft 共识层等。原文档指出日志类清单会随版本变化示例输出可能过时请以实际执行结果为准。查看最新清单的命令是scylla --help-loggers该选项在 tools/utils.cc#L186 中被定义为 print a list of logger names and exit即打印全部日志器名称后退出。执行后输出类似下面这样节选完整清单以你的版本为准BatchStatement LeveledManifest alter_keyspace alter_table alternator-auth alternator-conditions alternator-executor alternator-server alternator_controller alternator_ttl api auth auth_service batchlog_manager bloom_filter boot_strapper cache cdc commitlog commitlog_replayer compaction compaction_manager consistency controller cql_server cql_server_controller create_keyspace create_table database debug_error_injection default_authorizer describe direct_failure_detector features forward_service gossip group0_client group0_raft_sm hints_manager http i_partitioner init io large_data load_balancer lsa lua messaging_service migration_manager multishard_query mutation mutation_reader node_ops paging password_authenticator paxos prepared_statements_cache qos querier querier_cache query query_processor raft raft_group0 raft_rpc raft_topology range_streamer reader_concurrency_semaphore repair replication_strategy restrictions rpc s3 schema_tables scylla-nodetool seastar service_level_controller session sstable sstable_directory sstables_loader sstables_manager storage_proxy storage_service stream_session system_distributed_keyspace system_keyspace table tablets task_manager testlog token_metadata topology trace_keyspace_helper tracing types unimplemented version_generator view view_update_generator virtual_tables wasm从源码结构看这份清单基本覆盖了 ScyllaDB 的存储引擎sstable、commitlog、compaction、lsa、分布式协调gossip、raft、storage_service、messaging_service、查询路径cql_server、query_processor、paging、mutation_reader以及各类外部接口api、alternator-*、redis_server、http等主要子系统可作为快速定位故障模块的日志地图。底层实现REST API 与 LoggerRegistrynodetool setlogginglevel并非直接操作本地日志文件而是通过 ScyllaDB 节点上的 REST API 间接完成的。从源码可以看到完整的调用链命令入口setlogginglevel_operationtools/scylla-nodetool.cc#L2325-L2330校验参数后向节点发起POST /system/logger/{logger}?level{level}请求。服务端处理该请求由 api/system.cc#L134-L144 中的set_logger_level处理器接收将level查询参数通过boost::lexical_cast转换为logging::log_level枚举然后调用logging::logger_registry().set_logger_level(name, level)完成实际切换。参数校验服务端会对非法日志器名抛出 Unknown logger name 异常、对非法级别抛出 Unknown logging level 异常见 api/system.cc#L138-L142与 nodetool 端的必填校验形成双重保护。与此配套/system/logger端点还提供了一组有用的查询与批量操作接口同样定义在 api/system.ccGET /system/logger返回全部日志器名称get_all_logger_names见 L110-L112GET /system/logger/name查询指定日志器当前级别get_logger_level见 L124-L132POST /system/logger?levellevel一次性将所有日志器设置为同一级别set_all_logger_level见 L114-L122。这意味着即使不使用 nodetool也可以通过 curl 直接完成等价的运行时调优详见下文离线与在线等价方案小节。该机制在测试代码中同样被广泛使用例如 test/boost/commitlog_test.cc#L62 在测试启动前调用logging::logger_registry().set_logger_level(commitlog, logging::log_level::trace)临时开启 commitlog 的跟踪日志并在测试结束后恢复原级别见同一文件 L2573-L2584。这印证了logger_registry是 ScyllaDB 全局共享的日志级别控制中心运行时修改会即时作用于所有使用对应 logger 的代码路径。运维建议诊断流程与注意事项结合原文档警告与源码实现推荐按以下流程使用setlogginglevel确认目标类名先执行scylla --help-loggers拿到当前版本准确的日志类清单避免因类名拼写错误导致 Unknown logger name。查询当前级别用nodetool配套接口或下文 curl 方式先记录目标类的原始级别便于事后还原。临时开启详细日志仅对故障相关的 12 个类开启debug/trace例如nodetool setlogginglevel paging trace并尽量缩短采集窗口。定位后立即恢复将级别恢复为info避免大日志文件持续膨胀、挤占磁盘并拖慢日志写入。需要强调的是trace/debug级别会显著放大每个请求产生的日志量在存储代理storage_proxy、查询query_processor等高频路径上尤甚生产环境务必短、平、快。离线场景与等价方案setlogginglevel只解决节点已启动场景下的运行时调优。如果问题发生在 ScyllaDB 启动阶段、或集群整体处于停机状态则需要使用命令行参数在启动时设定日志级别。这部分内容在 docs/troubleshooting/log-level.rst 中有完整描述要点如下启动选项说明--default-log-level arg默认info设置所有日志器的默认级别合法值为 trace/debug/info/warn/error--logger-log-level arg按日志器分别指定级别格式为NAME0LEVEL0[:NAME1LEVEL1:...]合法日志器名可通过--help-loggers查询可重复指定多次单类与多类配置的语法分别为classlevel classlevel:classlevel:classlevel例如为sstable开启debug、为cql_server开启trace--logger-log-level sstabledebug:cql_servertrace在生产环境中通常把这些参数追加到/etc/sysconfig/scylla-server的SCYLLA_ARGS环境变量中重启后生效。验证方式与运行时方案完全一致——通过 REST 接口查询实际生效级别见 docs/troubleshooting/log-level.rst#L81-L98。而在线场景下即使不安装 nodetool也可直接使用等价 curl 命令完成相同的动态调整这些端点与setlogginglevel走的是同一套/system/loggerREST API# 查询 sstable 日志器当前级别 curl -X GET http://127.0.0.1:10000/system/logger/sstable # 将 sstable 日志器级别临时改为 trace curl -X POST http://127.0.0.1:10000/system/logger/sstable?leveltrace # 查询全部日志器名称 curl -X GET http://127.0.0.1:10000/system/logger合法级别同样为trace、debug、info、warn、error。总结nodetool setlogginglevel class level是 ScyllaDB 运行时日志调优的最小可用工具一条命令即可精准控制单个子系统的日志详细程度底层经由/system/loggerREST 端点落到全局logger_registry上即时生效。配合scylla --help-loggers获取类名、REST 接口查询/还原级别、以及--logger-log-level处理离线场景即可形成一套覆盖启动前—运行中—恢复后全流程的日志诊断方案。使用过程中务必牢记trace/debug仅作短时取证之用完成后应尽快恢复到info级别。【免费下载链接】scylladbNoSQL data store using the Seastar framework, compatible with Apache Cassandra and Amazon DynamoDB项目地址: https://gitcode.com/GitHub_Trending/sc/scylladb创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表