我们节省时间、精力和工时

我们的项目通常是区域性的,客户通常是部委。但是,除了公共部门之外,私人组织也使用我们的系统。它们实际上没有任何问题。

所以,主要项目都是区域性的,有时也会出现问题。例如,在性能方面,在产品服务器上推出新功能期间,某个地区有超过 20 万的宝贵用户。这是一种痛苦……

我叫 Ruslan,我支持 BARS 集团的信息系统和 为暴力连环 DBA 开发杀手机器人。这篇文章不适合胆小的人——里面有很多信件和图片。

我们节省时间、精力和工时

/awr

我们的一些应用程序在 Oracle DBMS 上运行。还有关于 PostgreSQL DBMS 的项目。 Oracle 有一个很棒的东西——收集 DBMS 上的负载统计数据,突出显示现有问题,甚至提出消除建议——自动工作负载存储库 (AWR)。在某一时刻(即痛苦的时刻),开发人员不断要求收集 用于性能分析的 AWR 报告。我们诚实地访问 DBMS 服务器,收集报告,将其发送给我们并将其发送到生产环境进行分析。第五次之后就变得烦人了...第十次之后就变得烦人了...

我的一位同事曾经表达过这样的想法:所有不止一次完成的事情都应该自动化。直到恼怒的那一刻,说实话,我没有考虑过这一点,并试图将所有可以自动化的东西自动化,但往往它并不被需求,更多的是一种研究而不是应用性质。

然后我想: “管理员不需要生成报告......”。毕竟,收集报告意味着执行 sql 脚本 @$ORACLE_HOME/rdbms/admin/awrrpt.sql 并将报告从服务器获取到您的位置...哦,是的,我们不允许进行生产开发。

然后我用谷歌搜索了必要的信息,从测试库上的文章创建了函数,运行了脚本,奇迹出现了 - 报告已编译并可以保存在本地。创建了经常需要 AWR 报告的功能,并告诉开发人员如何使用它们。

大约在这个时候,在我的业余时间,在与 @BotFather 交谈后,我为自己创建了一个 Telegram 机器人,只是为了好玩。我在那里添加了一个简单的功能 - 显示当前时间、汇率、天气,教它按计划向我的妻子(当时的女朋友)发送赞美。也许,当时,发送赞美是我的机器人最受欢迎的功能,我的妻子很欣赏它。

所以。开发人员在 Telegram 中给我们写信,我们在 Telegram 中向他们发送报告……如果他们不是写给我们,而是写给机器人怎么办?毕竟,这对每个人都会更好,报告会更快收到,最重要的是,绕过我们。这就是我的机器人第一个流行功能的想法的诞生。

我开始实施。我尽我所能,用 PHP 完成了这件事(我们的应用程序本身就是用 PHP 编写的,我对它比对 Python 更熟悉)。我不是一个好的编码员,所以我不会向你展示我的代码:)

该机器人位于我们的公司网络上,可以访问某些项目,包括目标数据库。为了不打扰团队或菜单中的参数,我将此功能添加到带有监控通知的群聊中。这样,机器人就会立即知道从哪个数据库收集报告。

收到类似命令 /awr N,其中 N 是需要报告的完整小时数(默认情况下 - 1 小时),即使是一周,如果数据库尚未重新启动,机器人也会立即开始工作,收集报告,将其发布为网页并立即(几乎就在那里)提供了急需的报告的链接。

点击链接,这就是 AWR 报告:

我们节省时间、精力和工时

正如预期的那样,开发人员应对了此类报告的生成,有些人甚至感谢我们。

意识到团队的便利性后,其他地区的项目经理也希望得到同样的服务,因为他们从客户那里得到的最多,并且担心系统的性能和可用性。我将该机器人添加到其他聊天中。他们仍然使用它,我对此感到很高兴。

后来CIT的同事知道了我们如何收集报告,也想这么做。我没有将它们添加到我们的聊天中,而是创建了一个单独的聊天,并按计划和请求生成报告。

/pgBadger

我们还有 PHP 与 PostgreSQL 结合的其他应用程序。 我使用相同的原则在群聊中为有需要的人实现了 pgBadger 报告的收集。 起初他们使用它,但后来就停止了。该功能因不必要而被删除。

/责任

我们部门有夜班,因此有一个时间表。它在 Google 表格中。寻找链接、打开图表、自己寻找并不总是很方便……我的一位前同事也玩过他的 Telegram 机器人,并将其引入我们部门的聊天中 关于部门员工轮班开始的通知。 机器人解析时间表,根据当前日期确定值班人员,并根据时间表或根据请求报告今天的值班人员。结果很棒而且很方便。确实,我不太喜欢这些消息的格式。另外,对于其他部门(例如BC“Medicine”)的员工来说,实际上并不需要其他方向值班人员的信息,但您需要知道“Medicine”中谁值班,以防出现问题。我决定“借用”该功能,但更改我不喜欢的内容。我制作了一种方便自己和他人使用的消息格式,删除了不必要的信息。

/tnls

在尝试使用 Telegram 机器人进行自动化之后,出现了许多不同的想法,但我想做一些严格必要的事情。我决定领导 请求统计。 为了访问客户的项目,我们实施了所谓的“跳转服务器”或转发服务器。在其上建立VPN连接,然后将应用程序端口、数据库和其他辅助转发通过ssh转发到我们的本地网络,以便轻松访问我们员工的项目,而不会出现VPN连接的问题。您所需要做的就是设置与我们公司网络的 VPN 连接。

请求统计显示,通常,在其中一条隧道发生故障(例如,由于网络问题,由于超时)后,人们会联系我们以恢复对该项目的访问。在大多数情况下,只需重新启动连接就足够了,一切都很好。我们自己做吧。这是命令:
我们节省时间、精力和工时

您“落入”所需的菜单项,选择您的项目,稍等片刻,每个人都感到高兴和满意......

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

/ecp_to_pem

进一步的统计表明,通常需要转换 pem 格式的 EDS Crypto Pro(Base64)用于各种集成,我们有相当多的集成。任务:获取一个容器,将其复制到安装了 P12FromGostCSP 实用程序(顺便说一下,付费)的 Windows 计算机,将其转换为 pfx,然后使用 OpenSSL(支持 GOST 加密)将 pfx 转换为 pem。虽然不是很方便,但您希望弹指间就能完成。

谷歌再次出手救援。成立 某种人的效用。我按照自述文件中的说明组装了它 - 它有效。我教机器人如何使用该实用程序,并且几乎立即得到了转换。
我们节省时间、精力和工时

到最终实施时,已发布命令切换到新的加密格式 - 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目录下,并将完成的pem拿到/srv/out中。

转换:

 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 管理和开发方面拥有丰富的经验。他立即在使用 ssh 连接到 DBMS 服务器时遇到了麻烦:他不知道在哪里或如何连接,访问权限没有明确描述,或者他无法将他需要的东西转发给自己。好吧,我们很乐意提供帮助,我们告诉他如何连接,并转发给他企业管理器。但使用 ssh 仍然无法解决问题。我的一位同事简单地解释了这一点:纯种 DBA :) 我们决定,如果我们需要在服务器上调整某些内容,我们将自己完成。

EM 有时会在重负载下崩溃,要重新启动它......您需要通过 ssh 连接并通过终端重新启动。 “管理员很擅长这件事,”我们的新同事断定。 DBMS 负载过重对我们来说并不罕见,并且请求重新启动 EM 也很常见。然后是同样的场景:紧张、恼怒并寻找问题的解决方案。于是在同一个群聊中出现了以下命令: /emstop 和 /emstart。

我们节省时间、精力和工时

/杀

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

我们节省时间、精力和工时

阿列克谢很欣赏这支球队,并给它起了一个亲切的名字—— “基利亚尔卡” 或枪。
有一天,在看到 Alexey 如何尝试并遭受痛苦,每次为每个进程输入 /kill xxx 后,我决定在我们的枪中添加“多管”:

我们节省时间、精力和工时

这样更好!一切都是为了你,阿列克谢,只是工作,亲爱的!

如此重要的团队自然是有限的 通过 user_id 访问 - “万无一失”。 看到Lesha如何熟练地杀死数据库服务器上的进程,几个人试图输入带有随机进程号的命令,但你骗不了我的智能机器人,他立即拒绝了。

/警报日志

好吧,为了以防万一,我发出了命令:
/alertlog — 获取指定数量的警报日志行
该机器人会提取警报日志并将其发送到我们的服务,例如名为 pyste 的 Pastebin,并将粘贴的链接发送到请求聊天。

/检查

接下来是一个请求 监控我们应用程序的真实性能。 到目前为止,项目技术支持手动收集这些数据。不管!我们勇敢的测试人员为此开发了测试用例。生成的测试日志不太方便阅读;没有经验的用户将需要很长时间才能理解并且不确定他是否会突出显示必要的信息。我们不喜欢用手做我们不能用手做的事情……机器人的新任务!

我们节省时间、精力和工时

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

当您选择所需的项目时,会出现有关测试开始的通知,而不是菜单,这样不耐烦的用户就不会运行我们的测试 100500 次:

我们节省时间、精力和工时

根据所选的菜单项,从我们的网络启动特定测试,即从机器人所在的机器(jmeter 在那里预先配置,必要的测试位于...)或直接从数据中心(从准备好的机器旁边的应用程序),以便在测试延迟时排除网络连接,或将其减少到最低限度。

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

我们节省时间、精力和工时

指标收集

该功能已经到来,感兴趣的项目经理已经在他们的区域收到了这样的功能。一位富有同情心的项目经理说:“我想要时间统计!” CIT的人告诉她,在Zabbix中监控这一切会很方便。 Zabbix,所以 Zabbix...

我认为我需要为复制解决方案的需要做好准备...我将这个想法放入了 docker 容器中。在容器中,jmeter按计划启动(每10分钟一次),将日志放在某个位置,php对其进行解析并以网页的形式显示必要的数据。 Zabbix 使用 web.page.get 键接收此页面,定期为某些依赖元素选择必要的数据并构建图表。

我们节省时间、精力和工时

我认为结果还不错。通过观察图表,我们首先看到应用程序的大致速度,如果在图表上检测到峰值,我们就知道“插头”大致在哪里。这很简单。到目前为止,只有一个地区需要它,但我准备为感兴趣的人复制它。

应用开发

最近,类似任务的统计数据引发了更多简化和便利工作的想法。在一些项目上,在应用服务器上,需要安装关键的Crypto Pro容器,数量很多,而且数字签名会随着时间的推移而过期。有时一天有 2 个任务到达。但我认为使用机器人来实现这些目的是不安全的,因此决定直接在应用程序中创建该功能。当然需要授权和检查访问权限。如果您拥有必要的权限,则将有一个附加菜单项可用于处理数字签名、安装、删除、查看信息等。该功能目前正在开发中。事实证明,这并不是很难,你只需要稍微阅读一下现有的说明,看看代码示例,询问更有开发经验的同事,然后就可以了。在研究过程中,出现了添加到应用程序中的想法。我不会搞拿破仑式的计划——有发展,大家各管各的。虽然这很有趣,但我自己也在做。

计划

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

但阿列克谢并没有忘记表达他的愿望。来自最新:
/kill_sql SQL_ID — 终止带有此 SQL_ID 请求的所有会话
/kill_block - 终止 root 阻塞会话
/show_em — 显示 EM 性能图片
他是个狡猾的家伙,他想用手机缝制 DBA =)

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

你如何摆脱例行公事和无趣的任务?

我希望阅读结果很有趣,甚至可能对某人有用,而且我没有时间让读者感到厌烦……祝我们所有人好运。

来源: habr.com

添加评论