打日志的疑问

来源:3-5 微服务的监控与可观测性

feixiang1209

2021-08-12 22:15:50

问题一: 

    ​打日志同步转异步不太懂,是把打日志写到 go func里么? 还是写打channel里给不同goroutine打日志呢?

问题二:

    ​在k8s的场景下,pod中container打印的日志最终会在宿主机的日志磁盘文件中, 在容器里 log.Println(xxx) 的日志是先写page cache么,那磁盘上可以马上能获取到么(是不是和脏页的刷新有关系)


写回答

1回答

Xargin

2021-08-13

异步就是:

select {
   case [内存 buffer] <- [你的日志内容]:
   default:
}

buffer 另一端有消费 goroutine 负责向磁盘写(可以做batch


这种在压力高的时候,内存 buffer 会满,所以会丢日志,只适用于一部分场景。


 2. 在k8s的场景下,pod中container打印的日志最终会在宿主机的日志磁盘文件中, 在容器里 log.Println(xxx) 的日志是先写page cache么,那磁盘上可以马上能获取到么(是不是和脏页的刷新有关系)

这个场景我不是特别熟悉,不过我印象中打开文件的时候有一个 O_DIRECT 的 flag,如果没有这个 flag,一般都是要走缓冲区的

主动调 fsync 应该也可以刷磁盘,不过一般也就数据库软件才会搞这些,普通应用比较少这么干的

0

Go高级工程师实战营

慕课网与 GoCN 社区官方联手打造,定义行业Go高级人才培养标准,4个月,快速晋升为P6+/D7级高级人才。

458 学习 · 266 问题

查看课程