读程序员的README笔记05_日志、监控与配置

这篇具有很好参考价值的文章主要介绍了读程序员的README笔记05_日志、监控与配置。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

读程序员的README笔记05_日志、监控与配置

1. 行为准则

读程序员的README笔记05_日志、监控与配置文章来源地址https://www.toymoban.com/news/detail-749852.html

2. 日志分级

2.1. 日志框架设有日志级别,它可以让运维人员根据重要性过滤消息

2.2. 编程语言有精良的日志类库,让运维人员对要记录的内容和时间有更多的控制

2.3. TRACE

2.3.1. 一个极其精细的日志级别

2.3.2. 对特定的包或类开放

2.3.3. 在开发阶段之外很少使用这个级别

2.4. DEBUG

2.4.1. 多用于那些只在调查产品出故障时有用

2.4.2. 在正常操作中没有用的日志

2.5. INFO

2.5.1. 一般用于输出应用程序运转良好的日志

2.5.2. 不应该用于输出任何问题的指示

2.6. WARN

2.6.1. 一般用于提示那些潜在问题

2.6.2. 一个资源已经接近其容量上限,就应该是一个WARN

2.7. ERROR

2.7.1. 表明正在发生需要注意的错误

2.8. FATAL

2.8.1. 如果程序遇到非常严重的情况,必须立即退出,就可以在FATAL级别上记录关于问题原因的信息

2.8.2. 包括该程序状态的上下文内容,恢复或诊断相关数据的位置也应该被记录下来

3. 日志的原子性

3.1. 如果某些信息只有在与其他数据配合时才有用,那么就应该把所有相关内容“原子化地”记录到一条消息中

3.2. 如果日志信息不能以原子化的方式输出,可以在消息中放置唯一的ID,这样日志信息就可以在后续的处理中被拼接起来

3.3. 不要假设日志会按照特定的顺序被看到,许多操作工具会重新排序,甚至弃用一些消息

3.4. 不要依赖系统的时间戳来排序,系统时钟可能被重置或来自不同的主机,从而造成日志信息难以理解

3.5. 避免在日志信息中使用折行,许多日志聚合器会把每一个新行当作一串单独的消息

3.5.1. 要特别确保堆栈跟踪被记录在一条消息中,因为它们在输出时经常包含折行

4. 日志性能

4.1. 过度的日志记录会损害性能

4.2. 日志必须被写入像磁盘、控制台或者某个远程系统这样的地方

4.3. 在写入日志前,要记得处理好字符串的拼接和格式化

4.4. 用参数化的日志输入及异步附加器来保持快速记录日志

4.5. 改变日志的冗余度和配置可以消除竞争条件和bug

4.5.1. 因为它降低了应用程序的速度

4.5.2. 如果你启用冗余的日志等级来调试一个问题,并发现一个bug消失了,日志等级的变化本身可能就是原因

5. 不要记录敏感数据

5.1. 日志信息不应该包括任何私人数据

5.1.1. 密码

5.1.2. 安全令牌

5.1.3. 信用卡号码

5.1.4. 电子邮件地址

5.2. 大多数框架支持基于规则的字符串替换和编辑,要配置它们,但不要依赖它们作为你的唯一防护手段

6. 系统监控

6.1. 常见的系统指标类型

6.1.1. 计数器

6.1.1.1. 测量的是某个事件发生的次数

6.1.1.2. 通过使用计数器获得缓存命中数和请求总数,你就可以计算出缓存命中率

6.1.2. 仪表盘

6.1.2.1. 一个基于时间点的测量值

6.1.2.2. 既可以上升又可以下降

6.1.3. 直方图

6.1.3.1. 根据事件的大小幅度分成不同的范围

6.1.3.2. 每一个范围都会有一个计数器,每当某事件的值落入其范围时,计数器就会递增

6.1.3.3. 通常用来测量请求所需的时间或数据有效负载的长度

6.2. 系统性能通常以阈值百分比的形式来衡量

6.2.1. 从0%到99%,被称为P99

6.3. 集中式可视化系统

6.3.1. Datadog

6.3.2. LogicMonitor

6.3.3. Prometheus

6.4. 使用标准的监控组件

6.4.1. 标准库可以与其他一切“开箱即用”的东西集成

6.5. 测量一切

6.5.1. 监测的性能开销很低,你应该广泛地使用这些监测数据

6.5.2. 抽样可以保持快速的性能,减少磁盘和内存的使用,但它也会使测量的准确性降低

6.5.3. 资源池

6.5.3.1. 资源池使用过大表明系统此刻的响应很卡顿或无法跟上需求速度

6.5.4. 缓存

6.5.4.1. 计算高速缓存的命中数和失误数,两者比率的变化会影响应用程序的性能

6.5.5. 数据结构

6.5.5.1. 数据结构大小的异样表明正在发生一些奇怪的事情

6.5.6. CPU密集型操作

6.5.6.1. 序列化是一个昂贵的、CPU密集型的操作,所以它花费的时间应该被记录下来

6.5.7. I/O密集型操作

6.5.7.1. 磁盘和网络I/O操作是缓慢和不可预知的,使用计时器来监测它们所需的时间

6.5.8. 数据大小

6.5.9. 异常和错误

6.5.9.1. 计算异常、错误响应代码和不良输入的次数,监测错误的出现频率可以在出错时很容易触发警报

6.5.10. 远程请求和响应

7. 跟踪器

7.1. RPC客户端会使用一个跟踪库,在他们的请求上附加一个调用跟踪ID

7.2. 调用跟踪ID通常通过RPC客户端包装器和服务网格自动为你传播,用来验证你在调用其他服务时是否传播了任何需要的状态

7.3. 分布式调用跟踪

7.3.1. 对上游API的一次调用可能会导致对下游的数百次不同服务的RPC调用

7.3.2. 分布式调用跟踪将所有这些下游调用连接成一个图

7.3.3. 分布式跟踪对于调试错误、监测性能、理解依赖关系和分析系统成本都很有用

7.3.3.1. 哪些API的服务成本最高、哪些消费者线程成本最高等

8. 配置

8.1. 应用程序和服务应该暴露出配置信息,并允许开发人员或网站稳定性工程师(site reliability engineers,SRE)配置运行时的行为

8.2. 表达方式

8.2.1. 普通的、对人友好的格式的文件

8.2.1.1. INI

8.2.1.2. JSON

8.2.1.3. YAML

8.2.2. 环境变量

8.2.3. 命令行参数

8.2.4. 最常见

8.2.5. 定制的领域特定语言(DSL)

8.2.6. 应用程序所使用的语言

8.3. 不要太有创意,要使用标准的配置格式,提供合理的默认值,校验配置的输入值,并尽可能地避免动态配置

8.3.1. 配置无须新花样

8.3.2. 记录并校验所有的配置

8.3.3. 提供默认值

8.3.3.1. 如果用户不得不配置大量的参数,你的系统将很难运行起来

8.3.3.2. 提供良好的默认值,这样你的应用程序对大多数用户来说开箱即用

8.3.4. 给配置分组

8.3.4.1. 将相关属性分组,这样就更容易组织和维护配置信息

8.3.4.2. 应用程序配置很容易变得难以管理,特别是不支持嵌套语法的键值格式

8.3.4.3. 可以使用像YAML这样允许嵌套的标准格式

8.3.5. 将配置视为代码

8.3.5.1. 配置即代码(configuration as code,CAC)的哲学认为,配置应该受到与代码同样严格的要求

8.3.5.2. 配置错误可能是灾难性的,一个错误的整数或缺失的参数就可以毁掉一个应用程序

8.3.5.3. 为了保证配置变化的安全,配置应该被版本控制、评审、测试、构建和发布

8.3.5.3.1. 将配置保存在像Git这样的VCS中,这样你就有了变更的历史
8.3.5.3.2. 像评审代码一样评审配置的变化,验证配置的格式是否正确、是否符合预期的类型和配置的值是否在理论范围内,构建和发布配置包

8.3.6. 保持配置文件清爽

8.3.6.1. 干净、清爽的配置对其他人来说更容易理解和改变

8.3.6.2. 删除不使用的配置,使用标准的格式和间距,不要盲目地从其他文件中复制配置

8.3.7. 不要编辑已经部署的配置

9. 工具集

9.1. 编写工具是协作性的

9.2. SRE通常会喜欢基于命令行界面(command line interface,CLI)的工具和自描述的API

9.2.1. 它们很容易脚本化,脚本化的工具很容易实现自动化

到了这里,关于读程序员的README笔记05_日志、监控与配置的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 读程序员的README笔记08_依赖管理

    2.6.1.1. 版本不应该被重复使用 2.6.1.2. 永远不要在现有版本下重新发布更改的代码 2.6.2.1. 版本应该帮助人们和工具对版本的优先顺序进行推断 2.6.3.1. 版本信息区分了预先发布的代码和已发布的代码,将构建流水号与构件相关联,并设置了稳定性和兼容性的合理预期 6.2.5.1

    2024年02月05日
    浏览(48)
  • 读程序员的README笔记11_软件交付(下)

    1.3.5.1. 通过持续交付,人力被完全从部署环节中移除 1.3.5.2. 打包、测试、发布、部署,甚至展开环节都是自动化的 1.3.6.1. Puppet、Salt、Ansible和Terraform等现成的解决方案可以与现有的工具集成,并且它们是专门为了自动化部署而设计的 1.4.4.1. 只需再次指向旧的版本 1.5.1.1. 

    2024年02月04日
    浏览(59)
  • 读程序员的README笔记04_防御式编程

    1.2.1.1. 切记让你的代码安全而有弹性 1.2.1.2. 编写拥有良好防御性的代码是一种对那些运行你的代码的人(包括你自己!)富有同情心的表现 1.2.1.3. 防御性的代码较少发生故障,就算它发生故障,也更有可能恢复 1.2.1.4. 安全的代码利用编译时的校验来避免运行时的故障,使

    2024年02月05日
    浏览(56)
  • 读程序员的README笔记10_软件交付(上)

    3.1.1.1. 打包一个构件称为发布 3.1.3.1. 部署的软件还不能被用户访问 3.1.3.1.1. 只是被安装了而已 3.1.3.2. 一旦部署,软件就会通过将用户转移到新的软件上而进行展开 3.1.4.1. 交付过程是更大的产品开发周期中的一部分 6.10.2.1. 每季度或每年发布一次

    2024年02月04日
    浏览(156)
  • 读程序员的README笔记01_学习如何学习

    6.3.2.1. 错误是不可避免的。成为一名软件工程师的路途艰辛,我们有时会失败 6.5.4.1. 代码从不说谎。注释有时却会。 6.5.4.1.1. Code never lies. Comments sometimes do 6.5.4.1.2. 去读源代码,因为它并不总是与设计文档相吻合 6.5.4.1.3. 不要只读你自己的代码库,还要去阅读高质量的开

    2024年02月05日
    浏览(51)
  • 读程序员的README笔记14_技术设计流程(下)

    1.4.2.1. 该项目将需要至少一个月的工程时间 1.4.2.2. 变更将对软件的扩展和维护产生长期的影响 1.4.2.3. 变更将显著影响其他团队 1.5.2.1. 设计文档是一种工具,可以帮助你思考、获得反馈、让你的团队了解情况、培养新的工程师,并推动项目规划 1.5.5.1. 阅读大量的设计文档

    2024年02月04日
    浏览(40)
  • 读程序员的README笔记18_职业生涯规划

    3.1.5.1. 他们的工作职责之一是管理他们的团队,而管理的一部分就是对你投入时间 3.1.5.2. 对管理者而言,反复取消一对一面谈可以是一个有价值的信号 3.3.2.1. 每个目标都附有3到5个关键结果,它们是标志着目标达成的具体指标 3.3.2.2. 不要把关键结果变成待办事项清单 3.

    2024年02月04日
    浏览(50)
  • 读程序员的README笔记13_技术设计流程(上)

    3.4.1.1. 外界干扰是深度工作的“杀手” 3.4.1.2. 避免所有的交流方式 3.4.1.2.1. 关闭聊天 3.4.1.2.2. 关闭电子邮件 3.4.1.2.3. 禁用电话通知 3.4.1.2.4. 换个地方坐 3.4.2.1. 有形产出是一份设计文档 4.2.3.1. 如果有一个以上的问题,询问哪些问题是最优先的 4.3.7.1. 注意与外人交流时不

    2024年02月04日
    浏览(67)
  • 读程序员的README笔记12_On-Call

    4.4.2.1. 回应不一定代表解决方案 4.4.3.1. 每次更新时,提供一个新的时间预估 4.5.3.1. 如果请求者没有回应,就说你将在24小时内因缺乏回应而关闭该任务票,然后真的这样做 5.3.1.1. 工程师必须找到问题,确定其严重性,并确定谁能修复它 5.3.1.2. 确认问题并了解其影响,以

    2024年02月04日
    浏览(41)
  • 读程序员的README笔记16_构建可演进的架构(上)

    3.1.1.1. 致软件依赖于其他的API或代码行为 3.1.1.2. 依赖性显然不可避免,甚至是可取的,但必须取得平衡 3.1.1.3. 高依赖性的系统很难修改 3.1.1.3.1. 它们有紧密的耦合性和高度的变更放大效应 3.1.1.3.2. 紧密的耦合性是指那些严重依赖彼此的模块,它们导致了更高的变更放大的

    2024年02月04日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包