可观测学堂

可观测问答

聚焦概念、架构、排障、价格与选型,一篇解决一个明确问题。

Python 中如何对字典按键(或按值)排序? cover
概念指南

Python 中如何对字典按键(或按值)排序?

Python 字典排序:sorted(d.items(), key=lambda x: x[0]) 按键排序,x[1] 按值排序,结果是元组列表;dict() 包回去得到有序字典。本文给出各种写法。

Python 中如何把列表切分成等大的块(chunks)? cover
概念指南

Python 中如何把列表切分成等大的块(chunks)?

Python 列表分块:列表推导式 [l[i:i+n] for i in range(0, len(l), n)] 最直观;itertools 的 batched(3.12+)更优雅。本文介绍各种分块方法。

Python 中如何快速启动一个 HTTP 服务器? cover
概念指南

Python 中如何快速启动一个 HTTP 服务器?

Python 一行命令启动静态文件服务器:python3 -m http.server 8000。本文介绍命令行用法、指定端口/目录、编程方式及安全提醒。

Ubuntu 20.04 中如何把 cron 任务的输出写入 syslog? cover
概念指南

Ubuntu 20.04 中如何把 cron 任务的输出写入 syslog?

Ubuntu 上 cron 任务输出默认发邮件,配置 rsyslog 可以把 cron 输出统一进 syslog。方法:放开 rsyslog 的 cron 日志配置,或在 crontab 中用 logger 命令。

如何阻止 Logstash 在 Elasticsearch 中自动创建默认映射? cover
概念指南

如何阻止 Logstash 在 Elasticsearch 中自动创建默认映射?

阻止 Logstash 自动创建默认映射的方法:提前在 Elasticsearch 中创建带显式 mapping 的索引、配置索引模板、或在 Logstash output 中指定自定义模板。

pytest 中如何只运行单个测试文件(或单个用例)? cover
概念指南

pytest 中如何只运行单个测试文件(或单个用例)?

pytest 运行单个文件:pytest tests/test_file.py;运行文件里某个用例:pytest tests/test_file.py::test_name;加 -k 按名称过滤。本文汇总精确定位测试的各种写法。

Fluent Bit 中如何截断超长的日志消息? cover
概念指南

Fluent Bit 中如何截断超长的日志消息?

Fluent Bit 截断超长日志最灵活的方式是用 Lua filter 写脚本按长度截断字段。本文给出 truncate.lua 示例和 Fluent Bit 配置,以及观测云 Pipeline 的等价做法。

如何用 pip 升级所有已安装的 Python 包? cover
概念指南

如何用 pip 升级所有已安装的 Python 包?

pip 没有内置的"升级全部"命令,常用方案:pip list --outdated 逐个升级,或用脚本循环升级,或 pip-review 工具一键完成。本文介绍各种方案及注意事项。

Python 中如何把字符串转成大写或小写? cover
概念指南

Python 中如何把字符串转成大写或小写?

Python 大小写转换:upper() 转大写、lower() 转小写、capitalize() 首字母大写、title() 每个单词首字母大写、casefold() 更彻底的小写比较。本文汇总各种方法。

如何用 virtualenv 创建指定 Python 版本的虚拟环境? cover
概念指南

如何用 virtualenv 创建指定 Python 版本的虚拟环境?

创建指定 Python 版本的虚拟环境:venv 只能用当前版本,virtualenv 包支持 -p 参数指定其他版本的解释器路径。pyenv 可管理多版本。本文介绍完整做法。

Logstash 中如何解析 JSON 格式的日志? cover
概念指南

Logstash 中如何解析 JSON 格式的日志?

Logstash 处理 JSON 日志两种方式:input 的 codec => json 整个事件按 JSON 解析,或 filter 的 json 插件解析 message 字段。本文给出配置示例及常见问题。

Python 多模块项目中如何正确使用 logging(各模块共用配置)? cover
概念指南

Python 多模块项目中如何正确使用 logging(各模块共用配置)?

Python 多模块日志最佳实践:每个模块 logger = logging.getLogger(__name__),只在程序入口配置一次(basicConfig 或 fileConfig),子 logger 自动继承配置。