需求
先说明需求,为什么要用NAS?
1.因为之前机器都是在ECS模式下,日志都可以持久化存储在ECS机器上,但是一旦应用上云部署为云应用了,那么云应用机器的扩缩容会导致POD的销毁和创建,这种情况下日志会随着POD而销毁,因此需要有一个持久化的存储
2.再者就是实现批量机器查找日志,之前在ECS模式下可以使用集团内部的pgm命令,一把梭哈就可以在上千台机器中定位查找的日志在哪台机器,但云原生POD模式就咩有这种功能了,通过NAS最后也实现了。
NAS
我也是第一次知道有NAS这款产品,那就先为阿里云的兄弟打一波广告:文件存储 (NAS),不了解什么是NAS的同学可以先了解一下,再继续下面。
购买及配置NAS
工欲善其事,必先购买NAS!
这里先说明一下,不同环境可能操作步骤有不同
由于我的是有状态云应用,用到yaml配置文件,因此需要用到NAS的话,需要先在yaml中配置好NAS挂载信息,又因为我的上千个云应用共用NAS,要实现每个应用的日志在NAS下要有所区分,又在NAS上区分了挂载目录。
大致的yaml配置脱敏示例如下:
# nas挂载 - name: "nasName" flexVolume: driver: "alicloud/nas" options: server: "file-system-id.region.nas.aliyuncs.com" path: "当前服务器上待挂载的本地路径" vers: "3" #文件系统版本,vers=3:使用NFS v3协议挂载文件系统。 options: "*"
其实到这里NAS挂载和配置就已经结束了,不懂的可以私戳我协助!
通过NAS实现批量机器并发查找日志
我们可以把NAS理解为一个磁盘,我的每个云应用会在磁盘上创建对应的目录,想在所有应用上查询同一个字段信息,相当于在NAS磁盘查询就好了,但是NAS没有办法直接登录啊!
这里给到一个解法:将NAS挂载到一台ECS机器,这样相当于给ECS机器挂载了一个磁盘,就可以查询NAS了。
ECS机器挂载NAS
说干就干,买ECS机器就不说了
买完之后跟着下面这里操作新购ECS时挂载NAS文件系统
一路向西就操作完毕
下面可以检查挂载结果了
使用VNC连接ECS实例,执行df -h命令,即可查看挂载的NAS文件系统信息
类似下图:
使用SSH密钥对连接Linux实例
使用VNC连接实例太不方便了,那是阿里云多少年前的东西了,也一直没有优化,用户体验极差
这里可以参考使用SSH密钥对连接Linux实例
1.由于前面买机器的时候没有创建公网固定IP或EIP,也没有创建密钥对,所以需要绑定EIP,创建密钥对
参考创建SSH密钥对
参考绑定SSH密钥对
2.我这里目前是通过:在支持SSH命令的环境中使用密钥对(通过命令配置信息)
(1)修改私钥文件的属性
chmod 400 [.pem私钥文件在本地机上的存储路径]
例如
chmod 400 /Users/kunzhi/**.pem
(2)连接实例
ssh -i [.pem私钥文件在本地机上的存储路径] root@[公网IP地址]
(3)输入密码登录即可
日志搜索
成功连接到实例后,需要进入对应的路径进行日志搜索
如下命令是对当前目录及子目录进行文件搜索关注字,并且每个文件只展示最新一条
find -name "文件名" | xargs -I file sh -c 'grep "关键字" file|tail -1 ;grep -l "关键字" file'
查找当前目录及子目录下包含"关键字”的文件名
find . -name "文件名" | xargs grep -l "关键字"
xargs,这个确实是一个好东西,后面会专门写一篇博客来记录一下
这里先给大家分享一个链接,可以先自己了解下xargs 命令教程
并发日志搜索
前面说了xargs好,但是GNU Parallel更香
这里是使用Linux 并行处理器 GNU Parallel
先安装
yum install parallel
安装完毕后直接在shell环境执行并行命令即可
#parallel 默认并发执行,每个CPU执行一条,当前机器是8核,即8个线程同:-j 8 #并发查找当前目录及子目录下的文件,包含"关键字"的第一条匹配的内容 #-I% 占位符 #-m1 取第一条 find -name 文件 |parallel -I% grep -m1 "关键字" 文件
其实xargs 也可以并发执行 参数是-P,但xargs的查询不保证顺序,有兴趣的同学可以执行下面的语句验证一下
#并发查找当前目录及子目录下的文件,包含"关键字"关键字的最新一条匹配的内容 find -name 文件 | xargs -P 8 -I file sh -c 'grep "关键字" file|tail -1 ;grep -l "关键字" file'
⚠️nas挂载找不到解决方案
NAS挂载找不到了,我们不可能再买一台ECS机器去操作,只需要进行重新配置即可,这里通过Linux系统挂载NFS文件系统解决
进行配置实例、手动挂载、自动挂载都走一遍,然后还原挂载。
通过命令:df -h
查看挂载情况即可了
好了,这次可以跑路了。。。。