节省时间,精力和工时

我们的项目通常是地区性的,客户通常是政府部门。但是,除了公共部门之外,私人组织也使用我们的系统。它们几乎没有问题。

因此,主要项目是地区性的,有时会出现问题。例如,在性能方面,当我们的用户数量超过2万时,我们宝贵的用户正处于向产品服务器推出新功能的时期。真是痛苦...

我叫Ruslan,我参与护送BARS Group信息系统并为残酷的串行DBA开发一个杀手机器人禁食不适合胆小的人-许多信件和图片。



/ awr


我们的某些应用程序在Oracle DBMS上运行。 PostgreSQL DBMS上有一些项目。 Oracle有一个很棒的事情-收集有关DBMS负载的统计信息,它突出显示了现有问题,甚至提出了消除建议-自动工作负载存储库(AWR)。在某一时刻(即痛苦之时),开发人员不断要求收集AWR报告以进行性能分析。老实说,我们去了DBMS服务器,收集了报告,将其拖给我们,然后将其发送给生产部门进行分析。 5号后一次开始紧张... 10号后开始引起刺激...

有一天,我的一位同事表达了这样的想法,即多次完成的所有操作都应该自动化。坦白说,直到烦恼的时刻,我才想到这一点,并试图使所有可以自动化的东西实现自动化,但通常并不需要它,而且研究超出了应用范围。

然后我想:“不需要管理员来生成报告...”。毕竟,要收集报告是执行sql脚本@ $ ORACLE_HOME / rdbms / admin / awrrpt.sql,然后将报告从服务器发送给我们自己...哦,是的,我们不允许开发继续进行。

然后,我搜索了必要的信息,在测试的基础上从文章中创建了一个函数,提取了脚本并创造了奇迹-收集了报告并将其保存在本地。经常需要AWR报告的已创建函数告诉开发人员如何使用它。

在这段时间里,在业余时间,与@BotFather交谈之后,我为自己创建了一个Telegram机器人,只是为了好玩。我在那里整理了一个简单的功能-显示当前时间,汇率,天气,并教他按计划向我的妻子(然后是一个女孩)致意。我的妻子对此表示赞赏,也许当时发送称赞是我的机器人最抢手的功能。

所以。开发人员通过Telegram给我们写信,我们通过Telegram向他们发送报告...但是,如果他们不是给我们而是给机器人写东西,该怎么办?确实,这将对每个人都更好,报告将更快地收到,最重要的是,我们将收到该报告。因此,我的机器人诞生了第一个广受欢迎的功能的想法。

我开始执行。正如我所管理的那样,我在PHP中做到了(实际上,我们的应用程序在PHP中,我对Python的了解比对Python的了解更多)。该编码器是我的某物,所以我不会显示我的代码:)该

机器人生活在我们的公司网络中,它可以访问某些项目,包括目标数据库。为了不打扰命令或菜单中的参数,我将此功能固定为带有监视通知的群聊。因此,僵尸程序立即知道要在哪个数据库上收集报告。

收到格式为/ awr N的命令,其中N是需要报告的整小时数(默认为1小时),即使在一周内,如果数据库没有重新启动,则漫游器会立即开始工作,收集报告,将其发布为网页,然后在此发布(几乎就在此处)提供了指向急需的报告的链接。

我们点击链接,这里是AWR报告:



正如预期的那样,开发人员应对了这一报告,甚至有人表示感谢。

在意识到了团队的便利性之后,其他地区的项目经理也希望这样做,因为他们大多数都是担心系统性能和可用性的客户那里获得利益。在其他聊天中添加了漫游器。他们仍然使用它,对此我感到很高兴。

后来,CIT的同事也写了关于我们如何收集报告的信息。我没有将它们添加到我们的聊天中,而是创建了一个单独的聊天,并根据时间表和请求生成了报告。

/ pgBadger


我们还有其他与PHP结合使用的PHP应用程序。根据相同的原则-在群聊中,为有需要的人实施了pgBadger报告的收集。最初,他们使用了它,但是后来他们停了下来。功能切除为不必要。

/ 义务


我们部门有夜班,因此有时间表。它在Google表格中。寻找链接,打开时间表,寻找自己并不总是很方便……一位前同事还玩着他的Telegram机器人,并在我们部门的聊天室中介绍了有关部门员工开始轮班的通知。漫游器解析日程安排,在当前日期之前确定值班人员,并根据日程安排或通过请求报告今天值班的人员。原来很棒,很舒适。是的,我不太喜欢邮件格式。另外,对于其他部门的员工(例如,“医学”业务中心),并不需要其他领域的值班信息,但是如果出现问题,您需要知道谁在“医学”中值班。我决定“借用”该功能,但要更改我不喜欢的功能。我为自己和其他人提供了一种方便的消息格式,删除了多余的信息。

/ tnls


在通过Telegram机器人进行“笔的测试”之后,出现了许多不同的想法,但是我想做一些严格必要的事情。我决定保留有关申诉的统计信息。为了访问客户的项目,我们已经实现了所谓的“跃点服务器”或转发服务器。在其上建立VPN连接,然后通过ssh,应用程序端口,数据库和其他辅助探针转发到我们的本地网络,以方便访问员工的项目,而不会出现VPN连接麻烦。只需建立与我们公司网络的VPN连接即可。

呼叫统计数据表明,通常情况下,在其中一个隧道掉线后(例如,在出现网络问题时,由于超时),他们转向恢复对项目的访问。在大多数情况下,只需重新启动连接就可以了,一切都很好。让我们自己做。这是命令:


“ Fall through”到所需的菜单项,选择项目,稍等片刻,每个人都很高兴和满意……

收到一条命令后,机器人通过字节和位的轻微移动,便会连接到转发服务器,事先知道需要重新启动哪个转发,并完成他的工作-恢复与项目的连接。我写了说明自行解决此类问题。并且仅在提供的工具不起作用时才与我们联系...

/ ecp_to_pem


此外,统计数据表明,通常需要将Crypto Pro数字签名转换为pem格式Base64)以进行各种集成,并且我们有很多集成。任务:拿起容器,将其复制到安装了P12FromGostCSP实用程序的Windows计算机上(通过付费方式),将其转换为pfx,然后使用OpenSSL(支持GOST加密)将pfx转换为pem。不是很方便,但是我想点击一下手指。

Google再次进行了救援。找到了某种善良的人。已收集,如自述文件所述-已获得。他教该机器人使用该实用程序,并获得了几乎即时的转换。


在最终实施时,已发布命令切换到新的加密格式-gost-2012。据我所知,当时的实用程序仅适用于旧版GOST(2001),也许它通常是另一个好人的另一种相似的实用程序,我记不清了。
过渡到新的GOST后,出于安全原因,该机器人的功能已被删除。在docker容器中实现了它。

Dockerfile,突然需要:
FROM ubuntu:16.04                                                                                                                                                                        
RUN apt update && apt -y install git sudo wget unzip gcc g++ make && \                       
   cd /srv/ && git clone https://github.com/kov-serg/get-cpcert.git && \                    
   cd get-cpcert && chmod +x *.sh && ./prepare.sh && ./build.sh && \                        
   mkdir -p /srv/{in,out} && \                                                              
   echo '#!/bin/bash' > /srv/getpem.sh && \                                                 
   echo 'cd /srv/get-cpcert' >> /srv/getpem.sh && \                                         
   echo './get-cpcert /srv/in/$CONT.000 $PASS > /srv/out/$CONT.pem' >> /srv/getpem.sh && \  
   chmod +x /srv/getpem.sh                                                                  ENTRYPOINT /srv/getpem.sh


要进行转换,您需要将源容器(格式为xxx.000的目录)放置在/ srv / in目录中,并在/ srv / out中拾取完成的pem。

转换:

 docker run -t -i -e CONT='<   ( ".000")>' -e PASS='<  >' -v /srv/in:/srv/in -v /srv/out:/srv/out --name ecptopem <  >/med/ecptopem:latest 

/ emstop和/ emstart


曾经,我们公司获得了非常出色的Oracle DBA,在管理DBMS和开发方面拥有更多经验。并没有通过与DBMS服务器的ssh连接立即发生:要么它不知道该在哪里连接以及如何进行连接,然后就没有清楚地描述访问权限,就无法将某些内容转发给自己。好吧,我们很高兴为您提供帮助,讨论了如何进行连接,并为此转发了企业管理器。但是使用ssh仍然无法解决问题。一位同事简单地解释了这一点:DBA纯种:)我们决定是否需要加强服务器上的某些功能,我们将自己完成。

EM在高负载下崩溃,然后重新启动...您需要通过ssh连接并通过终端重新启动。我们的新同事决定:“管理员非常了解这一点。” DBMS上的大负载并不少见,重新启动EM的请求也很常见。然后是同样的情况:紧张,不安和寻找问题的解决方案。因此,在同一组聊天中出现了以下命令:/ emstop和/ emstart。



/杀死


如果基础上的竞争激烈,并且有时会发生这种情况,则需要快速卸载数据库。最快的方法是杀死有问题的进程...为此,通过ssh连接,杀死-9 ...该机器人将提供帮助!



阿列克谢对这支球队表示赞赏,并给它起了一个亲切的名字- “ Kilyalka”或一把枪。
有一次,在看到亚历克斯是如何尝试和受苦之后,每次为每个过程输入/杀死xxx时,我决定在我们的枪支中添加“多边主义”:



那更好!亲爱的,Alex,一切为您服务,亲爱的!

自然地,对这种重要命令的访问受到user_id的限制-“防范傻瓜”。 看到Lesha如何巧妙地在数据库服务器上钉住进程,好几个人试图输入一个随机进程号的命令,但是您无法欺骗我的智能机器人,他立即拒绝了。

/警报日志


好吧,以防万一,我发出了一个命令:
/ alertlog <行数> -获取指定的行数alertlog'a
机器人拉出alertlog并将其发送到我们的服务,例如pastebin,称为pyste,然后将指向粘贴的链接发送到请求聊天。

/检查


然后提出了监视我们的应用程序实际性能的请求到目前为止,该项目的技术支持一直在手工收集这些数据。没关系!我们的英勇测试人员为此开发了测试用例。生成的测试日志不是很方便阅读,没有经验的用户会长时间理解,而不会突出显示必要的信息。而且我们不喜欢用手做,我们不能用手做...机器人的一项新任务!



/ checks命令显示了一个简单明了的菜单,这一次我们的家伙学会了如何在没有说明的情况下使用此命令!

当您选择所需的项目而不是菜单时,将显示有关测试开始的通知,以使不耐烦的用户不会运行我们的测试100500次:



根据选定的菜单项,从我们的网络中启动特定的测试,即从僵尸程序所在的机器(在其中预先配置了jmeter的机器,进行必要的测试...)或立即从数据中心(从与应用程序相邻的准备好的机器)启动特定测试。消除网络延迟,或者将其最小化。

在完成测试并收到日志后,机器人会对其进行解析并以“人类可读”的形式显示结果:



指标收集


该功能已“进入”,希望其所在地区的项目经理已收到此功能。一位富有同情心的项目经理说:“我想按时统计!” CIT的某人告诉她,在Zabbix中监视所有这些将很方便。Zabbix,所以Zabbix……

认为有必要为重复解决方案做准备……我在docker容器中设计了这个想法。在容器中,根据计划(每10分钟)启动jmeter,将日志添加到特定位置,php对其进行解析并以网页形式显示必要的数据。 Zabbix使用web.page.get键获取此页面,定期为某些相关元素选择必要的数据并构建图形。



看来结果还不错。观察图表,我们首先看到应用程序的近似速度,如果在图表上检测到峰,我们大致知道“堵塞”在哪里。一切都很简单。到目前为止,仅对一个地区有需求,但我准备将其分发给有意愿的人。

应用开发


不久前,关于同一类型任务的统计数据提出了简化和简化工作的想法。在某些项目中,在应用程序服务器上,需要安装Crypto Pro的密钥容器,其中有很多,数字签名会随着时间的流逝而过期。有时每天有2个任务“飞行”。但是我认为将bot用于这些目的并不安全,因此决定直接在应用程序中使用该功能。自然具有授权和访问控制。如果您具有必要的特权,将可以使用其他菜单项来处理数字签名,安装,移除,查看信息等。...目前,该功能正在开发中。事实证明,这并不是很困难,您需要略微阅读说明,查看代码示例,请经验丰富的开发人员来做。在研究过程中,出现了将其添加到应用程序中的想法。我不会制定拿破仑的计划-有发展,让每个人都做自己的事。但是现在,这很有趣-我自己做。

计划


正如我所说,使用我们的机器人产生了许多不同的想法,而不仅仅是-一般而言,“自动化点”的想法被遗忘了,因为我没有时间写下来。现在,我尝试写下所有想到的内容,并建议其他人也这样做。

但是Alex不会忘记抛出他的愿望清单。后者:
/ kill_sql SQL_ID-使用这样的SQL_ID查询杀死所有会话
/ kill_block-杀死根阻止会话
/ show_em-显示性能图片EM
技巧,想从电话上缝DBA =)

这就是我们为祖国的利益而努力的方式!

以及如何使自己摆脱例行和无趣的工作呢?

我希望阅读结果有趣,甚至对某人有用,而且我没有时间让读者感到厌倦……祝大家好运。

All Articles