日志与测试:从基础到高级的技术指南
立即解锁
发布时间: 2025-08-26 01:53:04 阅读量: 17 订阅数: 26 AIGC 


Python for DevOps: Mastering Automation and Cloud Computing
### 日志与测试:从基础到高级的技术指南
#### 日志相关技术
日志记录在软件开发和系统运维中至关重要,它能帮助我们追踪系统运行状态、排查问题。下面将介绍日志记录的一些常见模式以及强大的 ELK 栈。
##### 日志记录的常见模式
日志模块提供了一些不太明显但非常实用的模式。
- **使用 `logging.exception` 辅助函数**:在捕获异常时,传统的日志记录方式可能会掩盖关键信息。例如:
```python
try:
return expensive_operation()
except TypeError as error:
logging.error("Running expensive_operation caused error: %s" % str(error))
```
这种方式只是记录了异常的字符串表示,当异常不明显或发生位置不明确时,很难定位问题。而使用 `logging.exception` 可以记录完整的异常回溯信息:
```python
try:
return expensive_operation()
except TypeError:
logging.exception("Running expensive_operation caused error")
```
这样,日志会自动包含完整的异常堆栈信息,无需手动捕获和处理异常细节。
- **利用日志模块的字符串插值功能**:在进行字符串插值时,传统方式可能会导致生产代码崩溃。例如:
```python
>>> logging.error(
"An error was produced when calling: expensive_operation, \
with arguments: %s, %s" % (arguments))
```
如果 `arguments` 没有两个元素,上述语句会使代码出错。而使用日志模块的内置功能可以避免这个问题:
```python
>>> logging.error("An error was produced when calling: expensive_operation, \
with arguments: %s, %s", arguments)
```
这种方式更安全,是推荐的传递参数方式。
##### ELK 栈介绍
ELK 栈由 Elasticsearch、Logstash 和 Kibana 组成,它可以从日志中提取信息、捕获有用的元数据,并将其发送到文档存储(Elasticsearch),然后使用强大的仪表盘(Kibana)展示信息。
- **Nginx 日志分析**:以 Nginx 日志为例,默认的日志输出如下:
```plaintext
192.168.111.1 - - [03/Aug/2019:07:28:41 +0000] "GET / HTTP/1.1" 200 3700 "-" \
"Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:68.0) Gecko/20100101 Firefox/68.0"
```
日志配置在 `/etc/nginx/nginx.conf` 中:
```nginx
http {
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
...
}
```
其中,IP 后面的两个短横线,一个是格式需要,另一个表示缺少信息。如果服务器未启用身份验证,`$remote_user` 可以从配置中删除。
- **安装和配置 ELK 栈**:
1. **安装相关软件**:Elasticsearch、Logstash 和 Kibana 通常不在 Linux 发行版中,需要导入正确的签名密钥并配置包管理器。同时,要安装 Filebeat 用于日志转发。
2. **配置 Filebeat**:编辑 `/etc/filebeat/filebeat.yml` 文件,添加 Nginx 日志路径和 Logstash 端口:
```yaml
filebeat.inputs:
- type: log
enabled: true
paths:
- /var/log/nginx/*.log
output.logstash:
hosts: ["localhost:5044"]
```
然后启动 Filebeat 服务:
```bash
$ systemctl start filebeat
```
3. **配置 Logstash**:在 `/etc/logstash/conf.d/` 目录下创建 `nginx.conf` 文件,配置输入、过滤和输出:
```plaintext
input {
beats {
port => "5044"
}
}
filter {
grok {
match => { "message" => "%{COMBINEDAPACHELOG}"}
}
}
output {
elasticsearch {
hosts => ["localhost:9200"]
}
}
```
0
0
复制全文
相关推荐










