首页 文章 精选 留言 我的

精选列表

搜索[AI运维],共10000篇文章
优秀的个人博客,低调大师

面试宝典_Python.运维开发.0004.用Python实现tail实时输出新增日志?

面试题目: 1. 用PYTHON实现tail -f功能,默认显示最后15行,实时输出新增行? 解题思路: 1. 此需求在很多场景中都有遇到,而且在各大群中也被讨论过,虽然有现成的模版如pyinotify等模块实现,但面试更想通过你的解题思路来判断这场面试,具体到tail需要实现2个功能,一个实时输出新增内容,一个默认输出前15行,前者直接循环打开文件读取,全局变量中记录上次读取的位置,下一次循环seek到上次的位置读取即可,而对于默认显示前15行的做法是假设一行1000个字节,循环读取,当文件总长度小于1000时则从开头开始读取分割行取出后10行即可,即使不够10行也没关系,当文件总长度大于等于1000时,如果分割后大于10行,则读取分割行取出后10行即可,如果小于10行则继续向前1000个读取,以此类推~ 具体实现: #!/usr/bin/envpython #-*-coding:utf-8-*- """ # #Authors:limanman #51CTOBG:http://xmdevops.blog.51cto.com/ #Purpose: # """ from__future__importabsolute_import #说明:导入公共模块 importos importsys importtime importchardet #说明:导入其它模块 # if__name__=='__main__': seekps=0; target='data.txt'; try: #指针跳到最后作为起读位置 withopen(target,'r+b')asf: f.seek(0,os.SEEK_END) seekps=f.tell() print'notice:filelengthis',seekps rest_lines=[] #默认读取15行 line_reads=15 #假设默认每行1000字节 line_bytes=1000 ''' 1.当f_length<line_bytes,就seek到0开始读取,读完break 2.当f_length>line_bytes,换行符数n表示n+1行 =>当n+1>=line_reads,取出其中前line_reads个元素 =>当n+1<line_reads,继续向前seek到count*line_reads位置读取 ''' count=1 whileTrue: ifseekps<=line_bytes*count: f.seek(0) rest_lines=f.read().split(os.linesep)[-line_reads:] break f.seek(-1*line_bytes*count,2) rest_lines=f.read().split(os.linesep) iflen(rest_lines)>=line_reads: rest_lines=rest_lines[-line_reads:] break else: count+=1 forlineinrest_lines: code=chardet.detect(line).get('encoding') line=line.decode(code).encode(sys.stdout.encoding) sys.stdout.write(''.join([line.strip(),os.linesep])) sys.stdout.flush() exceptException,e: print'notice:openfilewitherror({0})'.format(e) exit() print'notice:startpositionis',seekps whileTrue: try: withopen(target,'r+b')asf: f.seek(0,os.SEEK_END) #防止数据被意外截断 iff.tell()<seekps: f.seek(f.tell()) else: f.seek(seekps) whileTrue: line=f.readline() ifnotline.strip(): break code=chardet.detect(line).get('encoding') line=line.decode(code).encode(sys.stdout.encoding) sys.stdout.write(''.join([line.strip(),os.linesep])) sys.stdout.flush() seekps=f.tell() exceptException,e: print'notice:openfilewitherror({0})'.format(e) break time.sleep(0.1) 有图有像:

优秀的个人博客,低调大师

日志平台的运维体系怎么搭:监控项清单、告警阈值、扩缩容策略与值班手册

【摘要】这次梳理的不是某条命令,而是一套能交给别人接手的东西:监控项从哪来、告警阈值怎么定、扩缩容什么时候触发、值班手册写什么。四层里最花时间的是第二层——阈值定不下来,告警就只能是"看着不对就报"。我按节点存活、磁盘水位、副本健康、导入延迟、慢查询数量五类给出了采集语句与建议阈值,扩缩容按磁盘水位与副本待调度量定触发条件,值班手册按三级处置写清动作。底座是 Apache Doris 3.x 集群,全部采集走 MySQL 协议的 SHOW 语句,不额外引入组件。以公开的拉卡拉实践为例,把 10 台 HBase + 10 台 ES + Oracle 一体机 + TiDB + MySQL 的混合栈统一到 10 台 Doris,服务器数量下降 52%(出处见文末)。文末另附适用场景与不适用场景清单。

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册