小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
日志系统
- linux系统如何查看日志?
查看日志命令有常用的tail、more、less、grep、cat等都能查看日志,各有千秋
1、tail命令带参数-f logfile 默认输出10行,可以指定输出行,同时可以使用|管道grep过滤日志
2、more/less用于分页查找日志
3、cat 不建议使用,假使日志文件过于庞大,则会出现卡死
4、grep多与上面的命令组合使用,过滤关键字日志信息
-n 查询并输出关键字的信息的行号
-i 忽略大小写
-A n:显示匹配到的字符串所在的行及其后n行,after
-B n:显示匹配到的字符串所在的行及其前n行,before
-C n:显示匹配到的字符串所在的行及其前后各n行,context
复制代码
- 如何解决快速选择查看应用服务日志?
我们知道查看服务日志,一条命令:tailf logfile,
那要是一台服务器上部署了多个服务,该怎么办呢?
1、先别说搭建日志收集集成系统这些个大东西;
2、如果是利用工具,如xshell,将命令写好设置成快捷键亦不失为一种办法;
3、还可以在linux中使用alias设置别名,即将查看日志命令用一个简短明了的别名代替;
4、再还有就是我目前使用的方法,编写成shell脚本来进行选择查看应用服务日志。
#!/usr/bin/sh
echo "*******************************************"
echo "**** XXX后台服务日志查看系统 ****"
echo "*******************************************"
echo "**** 目前可查看日志的服务有: ****
**** 1、基础服务 ****
**** 2、用户服务 ****
**** 3、XX服务 ****
**** 4、XX服务 ****
**** 5、XX中心 ****
**** 6、XX服务 ****
**** 7、XX中心 ****
****输入非1-7之间的值,即可退出当前脚本****
*******************************************"
read -p "****请输入选择查看日志的服务序号,不输入行数(默认显示10行):" no line
# -z 判断string类型是否为空,空即真,进行赋值,非空为假
if [ -z $line ];then
line=10
fi
while :
do
case $no in
1)echo "这是基础服务日志"
tailf yourfilenamepath.log
;;
2)echo "这是用户服务日志"
tailf yourfilenamepath.log
;;
3)echo "这是XX服务日志"
tailf yourfilenamepath.log
;;
4)echo "这是XX服务日志"
tailf yourfilenamepath.log
;;
5)echo "这是XX服务日志"
tailf yourfilenamepath.log
;;
6)echo "这是**服务日志"
tailf yourfilenamepath.log
;;
7)echo "这是**服务日志"
tailf yourfilenamepath.log
;;
*)echo "$no,服务编号不存在,请重新输入1-7之间正确的服务编号!"
break
;;
esac
done
复制代码
- 为什么要有日志收集器?
以上办法总归不是大道,灵活性还需要二次开发
所以就需要资源解决方案:日志收集器(这里推荐elk)
可以一个平台收集多台多个服务的日志展现,并且进行分析
复制代码
- 主流的日志系统有哪些?
业界解决方案ELK,其他的无非就是拼装,L换成FileBeat
其中ELasticsearch负责日志保存和搜索,Logstash负责收集日志,Kibana 负责界面
缺点:
• 运维成本高,每增加一个日志收集,都需要手动修改配置
• 监控缺失,无法准确获取logstash的状态
• 无法做定制化开发以及维护
换成F:
• 侵入低,无需修改程序目前任何代码和配置
• 相对于Logstash来说性能高,Logstash对于IO占用很大
复制代码
- 自主系统集成日志系统?
优点:
• 定制化的开发和维护
• 运维成本低
• 能够监控本身的运行状态
相对于前两种系统开销最低
缺点:
• 成熟度相对前两种低,可拓展性差
• 需要额外的开发时间
复制代码
- 那么为什么还要选择有缺点日志集成系统呢?没有答案,因为只在运维身上!




近期评论