日志模块重构
<p>[toc]</p>
<h1>方案分析</h1>
<p>刚入职的时候写过关于我们日志模块的改造方案(基于之前的开发经验). 经过上周的对graylog工具的调研,发现了更加专业的日志解决方案,特此请大家共同参考下.</p>
<p><strong>A.首先看下我们现有的日志技术栈</strong>
<img src="https://www.showdoc.com.cn/server/api/attachment/visitfile/sign/f6ccd88003f62443dc970b6840a090c4" alt="" />
<strong>B.使用Graylog的日志技术栈</strong>
<img src="https://www.showdoc.com.cn/server/api/attachment/visitfile/sign/30e07b93ccdd1c52ffca5c7147ba88ec" alt="" />
<em>注1: 图中的虚线部分这个到时候得研究下能不能直接调用google的bigquery接口,这样就不需要依赖外部插件</em></p>
<p><strong>C.我们从各项维度对比下这两种方案:</strong></p>
<table>
<thead>
<tr>
<th style="text-align: left;">因素</th>
<th style="text-align: left;">ELK</th>
<th style="text-align: left;">GRAYLOG</th>
<th style="text-align: left;">备注</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">知名度</td>
<td style="text-align: left;">高</td>
<td style="text-align: left;">高</td>
<td style="text-align: left;">elk成名更早</td>
</tr>
<tr>
<td style="text-align: left;">应用场景</td>
<td style="text-align: left;">大数据</td>
<td style="text-align: left;">日志领域</td>
<td style="text-align: left;">gray专业做日志管理</td>
</tr>
<tr>
<td style="text-align: left;">是否免费</td>
<td style="text-align: left;">有开源版本</td>
<td style="text-align: left;">开源版本</td>
<td style="text-align: left;">-</td>
</tr>
<tr>
<td style="text-align: left;">运维成本</td>
<td style="text-align: left;">高</td>
<td style="text-align: left;">低</td>
<td style="text-align: left;">学习,运维成本较高</td>
</tr>
<tr>
<td style="text-align: left;">性能</td>
<td style="text-align: left;">高</td>
<td style="text-align: left;">更高</td>
<td style="text-align: left;">elk臃肿庞大,gray专业简洁</td>
</tr>
<tr>
<td style="text-align: left;">交互体验</td>
<td style="text-align: left;">好</td>
<td style="text-align: left;">更好</td>
<td style="text-align: left;">-</td>
</tr>
</tbody>
</table>
<p>不做过多对比了, 这里有篇文章,比我讲的全面:
<a href="https://www.cnblogs.com/lfl17718347843/p/14115046.html">https://www.cnblogs.com/lfl17718347843/p/14115046.html</a></p>
<p><em>还有两点我认为比较重要的</em>:</p>
<ul>
<li>1 docker是原生支持graylog的,也就意味着服务部署的简化,且是udp协议,效能更佳.</li>
<li>2 elk现在的日志收集,当控制台的单条日志内容过多导致跨行时,elk里面会出现截断,每一行一条日志,这个在排查问题的时候非常的难受. graylog经过对代码的处理可以做到日志记录的完整性.</li>
<li>3 部分告警功能可以直接在graylog里面直接对接.对完善告警机制这一块提供了灵活性.</li>
<li>4 elk 和 graylog 在日志的存储上都是使用的Elasticsearch, graylog很好的屏蔽了ES的复杂性和优化工作.</li>
</ul>
<p><strong>D.总结</strong>
不得不说,我之前的方案有点封闭了. 当下业内在面向容器开发服务时, 有了更多可选的优秀的日志管理方案.比如elk,graylog ... 经过上周对graylog的调研及可行性研究. 个人觉得它适合我们的技术栈.</p>
<p>elk的话虽然很强大,但是门槛高,需要专业的运维人员来维护. 以elk的发展战略来看,它现在已经深耕大数据领域,日志管理只是它的一个基本场景.用它来管理小公司的日志数据平台.有点杀鸡用牛刀的感觉.</p>
<p>相比elk,graylog在日志领域就显得更加专业(从名字上就可以看出来咯),在部署,配置,使用 层面都比elk要简单许多,外部依赖项少,还支持基于日志的告警模块. 即便是相关人员离职.也不会给现有开发人员留下太多尴尬,对于公司发展来讲更有利.</p>
<h1>方案实施</h1>
<ul>
<li><strong>阶段一</strong>
<ul>
<li>a 本地搭建graylog环境</li>
<li>b 重构或者重写项目中的glog模块对接gelf的日志格式,发送到graylog.同时兼容现有elk方案,配置个开关.</li>
<li>c 模拟崩溃,docker日志发送到graylog.</li>
<li>d 编写graylog相关文档,供大家学习使用.</li>
</ul></li>
<li><strong>阶段二</strong>
<ul>
<li>a 让PP站使用上新版的日志模块</li>
<li>b 把PP站的elk部署事项移除,更换为graylog.</li>
<li>c 大家都观察体验一段时间.</li>
<li>d 研究下项目中bigquery日志部分.</li>
<li>e 结合分析量,对graylog设置内存,磁盘,过期等参数配置.</li>
<li>f 添加部分已知的告警模块(钉钉运维群,告警群的创建)</li>
</ul></li>
<li><strong>阶段三</strong>
<ul>
<li>确实没问题后,调整正式环境 aws1 aws2 aws3 三个环境的graylog环境.</li>
<li>继续丰富完善告警模块</li>
</ul></li>
</ul>