华为云DevOps系列之 —— 持续运维与监控(三)云上服务日志管理与审计
【摘要】 通过此文章,大家可以了解到日志管理在运维过程中的重要性,日志作为开发和运维人员最常用的分析依据不同的日志作用也不同,操作系统日志、nginx 日志、网络日志、数据库日志、业务日志、应用运行日志、容器日志等,在分布式场景下,日志散落在海量的虚拟或容器中,对于运维人员来讲,如何快速收集、查找某时间段的日志,或者通过对日志聚合分析显得极为重要 日志的概念日志对大家来说都不陌生,日志即网络设备、系统...
- 通过此文章,大家可以了解到日志管理在运维过程中的重要性,日志作为开发和运维人员最常用的分析依据
- 不同的日志作用也不同,操作系统日志、nginx 日志、网络日志、数据库日志、业务日志、应用运行日志、容器日志等,在分布式场景下,日志散落在海量的虚拟或容器中,对于运维人员来讲,如何快速收集、查找某时间段的日志,或者通过对日志聚合分析显得极为重要
日志的概念
- 日志对大家来说都不陌生,日志即网络设备、系统及服务程序等,在运作时都会产生一个叫
log
的事件记录 - 每一行日志都记载着日期、时间、使用者及动作等相关操作的描述
- 常见的日志包括数据库、运行日志、nginx 日志等
日志的使用场景
运维
- 需要日志管理系统统一记录设备、系统的运行情况,用于监控服务器状态、定位排查故障、分析性能瓶颈等
- 当我们的业务系统出现问题的时候,我们会根据问题发生的时间,找到系统产生的日志对应的该时间段内的一些运行日志,找到错误信息/提示信息,便于我们定位问题
- 要求:日志采集/导出便捷,索引功能快速、全面、易用
审计
- 审计日志主要是我们的业务系统里面通常会记录客户在操作过程中的一些操作(比如:系统登录、商品购买/查询等等),后续用于审计使用
- 要求:数据完整、安全传输、加密保存等
运营
- 需要提供业务信息,例如页面的 PV、UV、停留时间等,用于了解业务运营状况、分析用户行为特征等
- 要求:日志服务提供多样化的可视化报表展示功能
网络分析日志(Nginx)
- Nginx 是一款自由的、开源的、高性能的 HTTP 服务器和反向代理服务器,为 Web 服务器提供负载均衡,应对海量客户端并发访问的压力
- Nginx 日志主要分为两种:
access_log(访问日志)
和error_log(错误日志)
- 访问日志:我们可以得到用户的 IP 地址、浏览器的信息,请求的处理时间等信息
- 错误日志:记录了访问出错的信息,可以帮助我们定位错误的原因
Nginx 访问日志格式
参数 | 说明 | 示例 |
---|---|---|
$remote_addr | 客户端地址 | 192.168.1.1 |
$remote_user | 客户端用户名称 | — |
$time_local | 访问时间和时区 | 11/Jul/2021:11:00:01 +0800 |
$request | 请求的 URI 和 HTTP 协议 | “GET /article-1.html HTTP/1.1” |
$http_host | 请求地址,即浏览器中输入的地址(IP/域名) | www.ruochen.net.cn |
$status | HTTP 请求状态 | 200 |
$upstream_status | upstream 状态 | 200 |
$body_bytes_sent | 发送给客户端文件内容大小 | 1547 |
$http_referer | url 跳转来源 | https://www.google.com/ |
$http_user_agent | 用户终端浏览器等信息 | “Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36” |
$ssl_protocol | SSL 协议版本 | TLSv1 |
$ssl_cipher | 交换数据中的算法 | RC4-SHA |
$upstream_addr | 后台 upstream 的地址,即真正提供服务的主机地址 | 10.32.11.80:80 |
$request_time | 整个请求的总时间 | 0.111 |
$upstream_response_time | 请求过程中,upstream 响应时间 | 0.001 |
通过 Nginx 的日志我们可以进行访问分析,获得一些业务的请求成功率的统计数据以及业务的运营数据(PV、UV等),用于帮助运营分析
Linux 系统日志介绍
- 常用系统日志清单
日志类型 | 日志路径 | 内容 |
---|---|---|
整体系统信息 | /var/log/message | 公共日志文件,记录 Linux 内核消息以及各种应用程序的公共日志信息,包括启动、IO 错误、网络错误、程序故障等 |
启动日志 | /var/log/boot.log | 一般包含系统启动时的日志,包括自启动的服务 |
登录失败日志 | /var/log/btmp | 记录所有失败登录信息。非文本文件 ,可以使用 last -f /var/log/btmp 进行查看 |
Cron 计划日志 | /var/log/cron | cron 计划任务的日志,每当 cron 任务被执行的时候都会在这个文件里面记录 |
安全日志 | /var/log/secure | 包含验证和授权方面信息。例如:sshd 会将所有信息记录(其中包括失败登录)在这里 |
通常定位应用问题时,如果发现应用运行日志没有发现异常,就会排查操作系统日志,查看问题发生时是否环境有问题
MySQL 日志(binlog)
- 概念
binlog
是一个二进制格式的文件,用于记录用户对数据库更新的 SQL 语句信息,例如更改数据库表和更改内容的 SQL 语句都会记录到 binlog 里,但是对库表等内容的查询不会记录- 默认情况下,binlog 日志是二进制格式的,不能使用查看文本工具的命令(如:cat、vi、vim等)查看,而是用
mysqlbinlog
查看
- 作用
- 恢复:用户误删除的数据,可能根据历史数据对数据库表进行恢复
- 复制:主从数据同步,实现高可靠
- 审计:追踪数据库历史操作记录,用于安全分析等
容器日志
Docker 日志
- 容器引擎日志一般都交给了系统日志,不同的操作系统会放在不同的位置
- 容器日志可以理解是运行在容器内部的应用输出的日志,默认情况下,
dockerlogs
显示当前运行的容器的日志信息,内容包含 STOUT(标准输出) 和STDERR(标准错误输出)
Kubernetes 日志
应用(Pod)级别
,Pod 级别的日志 , 默认是输出到标准输出和标志输入,实际上
跟docker 容器的一致。使用kubectl logs pod-name -n namspace
查看节点级别
,容器化应用写入 stdout 和 stderr 的任何数据,都会被容器引擎捕获并被重定向到某个位置。 例如,Docker 容器引擎将这两个输出流重定向到某个日志驱动 , 该日志驱动在 Kubernetes 中配置为以 json 格式写入文件
- 集群级别
- 使用在每个节点上运行的节点级日志记录代理
- 在应用程序的 pod 中,包含专门记录日志的 sidecar 容器
- 将日志直接从应用程序中推送到日志记录后端
业务运行日志
- 运行日志内容包括:运行时间 + 模块名 + 线程号 + 级别 + 类名/方法名 + 执行结果(返回值)
- 运行日志主要作用:问题分析和业务分析(了解业务的执行情况)
- 例如下图的一个日志片段,日志头中包含时间、线程 ID、模块名、级别,冒号后面是日志的内容,通常包括类名、方法名、函数运行的成功与失败以及返回值。通过此行日志,我们可以了解业务的运行情况
业务日志输出规范
- 日志内容使用英文描述,语义要完整准确,涉及到度量信息需要标识相应的度量单位,不允许出现不明含义的魔鬼数字
- 在所有出错或业务失败的地方,必须记录日志,日志中包括错误描述
- 密码等敏感信息不能以明文形式记录在日志文件中
- 在 INFO 级别日志中,不能出现 error、fail、fault 这些敏感词汇
- 执行成功的调用和过程禁止打印 WARN 及以上级别的日志
- 禁止循环中打印日志(重复日志打印太多,或等待日志的开销过大,导致日志磁盘撑爆等等)
- 禁止短时间内频繁重复输出相同信息的日志点
- 单服务实例在非 Debug 级别下产生的运行日志,最大应小于 30KB/min
日志级别重要性:一方面可以快速过滤 ERROR 或 WARNING 的日志,另一方面为了保存更久的日志可以通过动态调整日志输出的级别,如停止输出 INFO 级别的日志
开运日志系统 ELK 三剑客
Logstash
:日志管道工具,接受数据输入,执行数据转换,然后输出数据Elasticsearch
:基于 Lucene 搜索引擎的 NoSQL 数据库Kibana
:界面层,在 Elasticsearch 之上工作,用于日志呈现,可以进行日志搜索和日志结构化分析、报表分析等
容器日志收集
fluentbit
:日志的采集fluentd
:日志的聚合,减少日志的过度连接对 elasticsearch 造成的压力太大- 后端
- 日志的搜索:存储到 ES 中,通过
Kibana
查询 - 报表/实时分析:将日志写入
influxdb
中,通过Grafana
实时查看,做报表分析、可视化分析等
- 日志的搜索:存储到 ES 中,通过
最后,欢迎大家关注我的个人微信公众号 『小小猿若尘』,获取更多IT技术、干货知识、热点资讯。同时,我在公众号中分享了精心整理的一些视频资料(包括 Python全栈教程、AI教程、前端、数据库等),大家回复相应关键词即可获取网盘视频链接,感谢大家的关注😊
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)