Skip to content

Commit

Permalink
更新 qrcode
Browse files Browse the repository at this point in the history
  • Loading branch information
isno committed Feb 1, 2024
1 parent 0588378 commit fe99b8c
Show file tree
Hide file tree
Showing 6 changed files with 44 additions and 10 deletions.
13 changes: 13 additions & 0 deletions .vuepress/layouts/layout.vue
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,9 @@
</div>
</div>
<CommentService :darkmode="isDarkMode" class="layout-comment" />
<div class="qrcode">
<img src="https://www.thebyte.com.cn/assets/webchat-pHlFlW6o.jpg" width = "160" align=center />
</div>
</template>
</ParentLayout>
</template>
Expand Down Expand Up @@ -53,6 +56,16 @@
</script>
<style lang="scss" scoped>
.qrcode {
position: fixed;
bottom: 80px;
right: 30px;
}
.qrcode img {
border-radius: 6px;
box-shadow: 0 2px 3px 0 rgba(0,0,0,0.1);
}
.layout-comment {
max-width: initial;
margin-top: 100px;
Expand Down
3 changes: 2 additions & 1 deletion Observability/conclusion.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,5 @@
参考

- 《cncf 可观测性白皮书》https://github.com/cncf/tag-observability/blob/main/whitepaper.md
https://github.com/cncf/tag-observability/blob/dec82aa5bd39a8834f58da0377d1e2b8fdeeac63/whitepaper-zh.md
https://github.com/cncf/tag-observability/blob/dec82aa5bd39a8834f58da0377d1e2b8fdeeac63/whitepaper-zh.md
- 《Gorilla:快速、可扩展的内存时间序列数据库》https://blog.acolyer.org/2016/05/03/gorilla-a-fast-scalable-in-memory-time-series-database/
13 changes: 5 additions & 8 deletions Observability/dumps.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
# Crash Dumps

即使代码写得再谨慎,免不了还是会发生各种意外的事件,比如出现 Segment fault 错误,编译阶段不会报错,运行阶段无法依靠任何 trace 信息。
即使代码写得再谨慎,免不了还是会发生崩溃事件,比如出现 Segment fault 错误,编译阶段不会报错,运行阶段也无任何可依靠的 trace 信息。

(cncf 只提到了 core dumps,但 dump 应该包含更多,heap dump、thread dump。。。)
好在 Linux 系统中,只要程序异常终止或者崩溃会主动将运行中的状态保存在一个文件中。这个文件叫 core dump 文件(core 的意思是内存,dump 的意思是扔出来)。我们可以认为 core dumps 是“内存快照”,但实际上,除了内存信息外,还有关键的程序运行状态也会 dump 下来。例如寄存器信息(程序指针、栈指针)、内存管理信息、其他处理器和操作系统状态等信息。


Expand All @@ -15,16 +16,12 @@
|SIGSEGV || Invalid memory reference |
|SIGTRAP || trace/breakpoint trap |

core dump 文件一般可以用来分析程序运行到底是哪出错了,最典型的使用是结合 gdb 分析,定位文件中引发core dump的行。当然并不一定程序崩溃了才能产生 core dump 文件,也可以使用 gdb 的 generate-core-file 命令生成一个 core 文件。
core dump 文件一般可以用来分析程序运行到底是哪出错了,最典型的使用是结合 gdb 分析,定位文件中引发 core dump 的行。当然并不一定程序崩溃了才能产生 core dump 文件,也可以使用 gdb 的 generate-core-file 命令生成一个 core 文件。

由于 core dump 文件会占据一定的磁盘空间(处理密集型的应用程序可能会生成两位数 Gb 大小的 core dump 文件),默认情况下,Linux 不允许生成 core dump 文件,得通过命令 ulimit -c unlimited(不限制 Core 文件大小)开启。
由于 core dump 文件会占据大量的磁盘空间(处理密集型的应用程序可能会生成两位数 Gb 大小的 core dump 文件),默认情况下,Linux 不允许生成 core dump 文件,得通过命令 ulimit -c unlimited(不限制 Core 文件大小)开启。


虽然把 dumps 数据纳入了可观测体系,但针对 dumps 数据的采集还尚未有成熟的方案,应用和基础设施角色权限(譬如应用无法访问系统全局配置的权限),数据持久化的问题(崩溃的应用,例如 Pod在重启之前要收集的核心 dump 文件并写入持久卷)。

RFC 讨论 Linux内核社区中支持 core_pattern 的命名空间,而不是将其作为系统全局变量设置 [^1]

虽然 docker 社区中有一些方案,例如允许每个 container 去设置 core dump 文件的 pattern[^2],但目前来看,这些意见和方案到目前也没有进展。还是得依靠原始的手段去处理各类 dumps 文件。
虽然 CNCF 把 dumps 数据纳入了可观测体系,但针对 dumps 数据的采集还尚未有成熟的方案,应用和基础设施角色权限(容器应用与系统全局配置问题),数据持久化的问题(例如 Pod 在重启之前得把 core dump 文件并写入持久卷)。RFC 讨论 Linux 内核社区中支持 core_pattern 的命名空间,而不是将其作为系统全局变量设置 [^1],docker 社区早些年也在讨论允许每个 container 去设置 core dump 文件的 pattern[^2]。很遗憾,这些意见和方案到目前也没有进展。还是得依靠原始的手段去处理各类 dumps 文件(毕竟分析 dumps 文件只是个极低概率的工作,这些投入不如放在控制代码质量上)。

[^1]: 参见 https://lore.kernel.org/patchwork/patch/643798/
[^2]: 参见 https://github.com/moby/moby/issues/19289
23 changes: 23 additions & 0 deletions Observability/metrics.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,29 @@
由于目前并没有 Metrics 采集的标准 API,所以不同的监控系统在收集 Metrics 数据时采取的手段也可能不一样,但大部分无非都是通过 PUSH 到中心 Collector 方式采集 Metrics(比如各种 Agent 采集器,Telegraf 等); 又或者是中心 Collector 通过 PULL 的方式去主动获取 Metrics(比如 Prometheus)。


时序数据库

TSDB 是专门用来存储随时间变化的数据,如股票价格、传感器数据等。时间序列(time-series)的是某个变量随时间变化的所有历史,而样本 (sample)指的是历史中该变量的瞬时值。


时序数据一般有以下几个显著特点:

- 每条数据必然自带时间戳,数据以时间排序
- 不可变性(immutable):一旦写入,基本不做修改或单条删除。(因为老化过期可以做删除)
- 数据量大,一般要求支持PB级别。同时也要求高吞吐能力。
- 高效的存储压缩效率,降低成本
- 时序最核心的用途在于数据分析,包括降采样、数据插值和空间聚合计算等
- 时序的唯一性:某一个时刻的某个指标只有一条数据(或点),即时出现多条数据也会被认为是同一条数据(或点)
- 单条数据并不重要



回到我们的主角 Prometheus, 它会将所有采集到的样本(sample)数据以时间序列(time-series)的方式保存在内存数据库中,并且定时保存到硬盘上。时间序列是按照时间戳和值的序列顺序存放的,每条time-series通过指标名称(metrics name)和一组标签集(labelset)命名。

主流的 TSDB 包括了 InfluxDB、Prometheus、Kdb、Graphite、TimescaleDB、Apache Druid 等等。
为了追求极致性能和极致成本,大家都在针对海量数据和使用场景,持续改进和优化数据的存储结构设计、各种高效索引机制、和查询效率。从单点技术或者关键技术上来讲,有趋同性和同质化的大趋势


Metrics 提供的信息可用于系统整体行为和监控状况的分析,它不一定能揭示问题根本原因,但可以作为发现问题的起点。一个典型例子是你收到一条告警”请求成功率跌到了 10%“,你意识到不妙,立即开始处理,然后结合其他 Signals 去找到 root cause,从而解决问题。

prometheus-vs-victoriametrics[^1]
Expand Down
2 changes: 1 addition & 1 deletion about.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,5 +13,5 @@

发一些我的闲唠叨,有兴趣的可以关注。
<div align="left">
<img src="./assets/webchat.jpg" width = "250" align=center />
<img src="./assets/qrcode-v2.png" width = "250" align=center />
</div>
Binary file added assets/qrcode-v2.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.

0 comments on commit fe99b8c

Please sign in to comment.