Chúng tôi tiết kiệm thời gian, thần kinh và giờ làm việc

Các dự án của chúng tôi thường mang tính khu vực và khách hàng thường là các bộ. Tuy nhiên, ngoài khu vực công, các tổ chức tư nhân cũng sử dụng hệ thống của chúng tôi. Thực tế không có vấn đề gì với họ.

Vì vậy, các dự án chính đều mang tính khu vực và đôi khi có vấn đề với chúng. Ví dụ: về hiệu suất, khi ở các khu vực có hơn 20 nghìn người dùng quý giá của chúng tôi trong thời gian triển khai chức năng mới trên máy chủ sản phẩm. Đó là một nỗi đau…

Tên tôi là Ruslan và tôi hỗ trợ hệ thống thông tin của BARS Group và phát triển một bot sát thủ cho các DBA bạo lực nối tiếp. Bài đăng này không dành cho người yếu tim - có rất nhiều chữ cái và hình ảnh.

Chúng tôi tiết kiệm thời gian, thần kinh và giờ làm việc

/awr

Một số ứng dụng của chúng tôi chạy trên Oracle DBMS. Ngoài ra còn có các dự án trên PostgreSQL DBMS. Oracle có một điều tuyệt vời - thu thập số liệu thống kê về tải trên DBMS, trong đó nêu bật các vấn đề hiện có và thậm chí đưa ra khuyến nghị để loại bỏ - Kho lưu trữ khối lượng công việc tự động (AWR). Tại một thời điểm (cụ thể là tại thời điểm đau đớn), các nhà phát triển liên tục yêu cầu thu thập Báo cáo AWR để phân tích hiệu suất. Chúng tôi đã thành thật đến máy chủ DBMS, thu thập các báo cáo, đưa chúng đến cho chúng tôi và gửi đến nơi sản xuất để phân tích. Sau lần thứ 5 nó trở nên khó chịu... sau lần thứ 10 nó trở nên khó chịu...

Một trong những đồng nghiệp của tôi từng bày tỏ ý tưởng rằng mọi việc được thực hiện nhiều lần đều phải được tự động hóa. Thành thật mà nói, cho đến thời điểm khó chịu, tôi đã không nghĩ về điều đó và cố gắng tự động hóa mọi thứ có thể tự động hóa, nhưng thường nó không có nhu cầu và mang tính chất nghiên cứu hơn là ứng dụng.

Và rồi tôi nghĩ: “Không cần quản trị viên để tạo báo cáo…”. Xét cho cùng, việc thu thập báo cáo có nghĩa là thực thi tập lệnh sql @$ORACLE_HOME/rdbms/admin/awrrpt.sql và đưa báo cáo từ máy chủ đến địa điểm của bạn... Ồ vâng, chúng tôi không cho phép phát triển để sản xuất.

Sau đó, tôi tìm kiếm thông tin cần thiết trên Google, tạo chức năng từ bài viết trên cơ sở thử nghiệm, chạy tập lệnh và phép màu - báo cáo đã được biên soạn và có thể được lưu cục bộ. Đã tạo các chức năng thường cần đến báo cáo AWR và hướng dẫn các nhà phát triển cách sử dụng chúng.

Vào khoảng thời gian này, khi rảnh rỗi, sau khi nói chuyện với @BotFather, tôi đã tạo một bot Telegram cho chính mình, chỉ để giải trí. Tôi đã cài đặt một chức năng đơn giản ở đó - hiển thị thời gian hiện tại, tỷ giá hối đoái, thời tiết, dạy nó gửi lời khen đến vợ tôi (khi đó là bạn gái) theo lịch trình. Có lẽ vào thời điểm đó, gửi lời khen là chức năng phổ biến nhất trong bot của tôi và vợ tôi đánh giá cao nó.

Vì thế. Các nhà phát triển viết thư cho chúng tôi trên Telegram, chúng tôi gửi báo cáo cho họ trên Telegram... Điều gì sẽ xảy ra nếu họ viết thư không phải cho chúng tôi mà cho bot? Suy cho cùng, điều đó sẽ tốt hơn cho mọi người, báo cáo sẽ được nhận nhanh hơn và quan trọng nhất là bỏ qua chúng tôi. Đây là cách mà ý tưởng về chức năng phổ biến đầu tiên cho bot của tôi ra đời.

Tôi bắt đầu thực hiện. Tôi đã làm điều đó tốt nhất có thể bằng PHP (bản thân ứng dụng của chúng tôi cũng bằng PHP, tôi thành thạo nó hơn là Python). Tôi không phải là một lập trình viên giỏi nên tôi sẽ không cho bạn xem mã của mình :)

Bot hoạt động trên mạng công ty của chúng tôi và có quyền truy cập vào một số dự án nhất định, bao gồm cả cơ sở dữ liệu mục tiêu. Để không phải bận tâm đến các thông số trong nhóm hoặc menu, tôi đã thêm chức năng này vào cuộc trò chuyện nhóm với các thông báo theo dõi. Bằng cách này, bot sẽ ngay lập tức biết cơ sở dữ liệu nào cần thu thập báo cáo.

Đã nhận được một lệnh như /awr N, trong đó N là số giờ cần có báo cáo (theo mặc định - 1 giờ), thậm chí trong một tuần, nếu cơ sở dữ liệu chưa được khởi động lại, bot sẽ ngay lập tức bắt đầu hoạt động, thu thập báo cáo, xuất bản dưới dạng trang web và ngay lập tức (gần như ngay tại đó) cung cấp liên kết đến báo cáo rất cần thiết.

Theo liên kết và đây là báo cáo AWR:

Chúng tôi tiết kiệm thời gian, thần kinh và giờ làm việc

Đúng như dự đoán, các nhà phát triển đã giải quyết được việc tạo báo cáo như vậy và một số thậm chí còn cảm ơn chúng tôi.

Đánh giá cao sự tiện lợi của nhóm, các nhà quản lý dự án từ các khu vực khác cũng mong muốn như vậy, vì họ nhận được nhiều lợi ích nhất từ ​​khách hàng và lo lắng về hiệu suất cũng như tính khả dụng của hệ thống. Tôi đã thêm bot vào các cuộc trò chuyện khác. Họ vẫn sử dụng nó và tôi rất vui vì điều đó.

Sau đó, các đồng nghiệp ở CIT đã biết cách chúng tôi thu thập báo cáo và cũng muốn làm như vậy. Tôi không thêm chúng vào cuộc trò chuyện của chúng tôi, tôi tạo một cuộc trò chuyện riêng với việc tạo báo cáo theo lịch trình và theo yêu cầu.

/pgBadger

Chúng tôi cũng có các ứng dụng khác bằng PHP kết hợp với PostgreSQL. Tôi đã triển khai việc thu thập báo cáo pgBadger cho những người có nhu cầu theo nguyên tắc tương tự - trong các cuộc trò chuyện nhóm. Lúc đầu họ sử dụng nó, nhưng sau đó họ dừng lại. Các chức năng đã bị cắt bỏ vì không cần thiết.

/nhiệm vụ

Bộ phận của chúng tôi có ca đêm và theo đó, có lịch trình. Nó có trong Google Trang tính. Không phải lúc nào cũng thuận tiện khi tìm kiếm liên kết, mở biểu đồ, tự tìm kiếm... Một trong những đồng nghiệp cũ của tôi cũng đã chơi với bot Telegram của anh ấy và giới thiệu nó vào cuộc trò chuyện của bộ phận chúng tôi thông báo về việc bắt đầu ca làm việc của nhân viên bộ phận. Bot phân tích lịch trình, xác định người trực vào ngày hiện tại và theo lịch trình hoặc theo yêu cầu, sẽ báo cáo ai đang trực hôm nay. Nó hóa ra tuyệt vời và thuận tiện. Đúng, tôi không thực sự thích định dạng của tin nhắn. Ngoài ra, đối với nhân viên của bộ phận khác (ví dụ BC “Y học”), thông tin về những người trực ở các hướng khác là không thực sự cần thiết, nhưng bạn cần biết ai đang trực ở “Y học” trong trường hợp có vấn đề. Tôi quyết định “mượn” chức năng nhưng thay đổi những gì tôi không thích. Tôi đã tạo một định dạng tin nhắn thuận tiện cho bản thân và những người khác, loại bỏ những thông tin không cần thiết.

/tnls

Sau khi thử tự động hóa bằng bot Telegram, nhiều ý tưởng khác nhau đã xuất hiện, nhưng tôi muốn làm những việc thực sự cần thiết. Tôi quyết định dẫn đầu thống kê theo yêu cầu. Để truy cập các dự án của khách hàng, chúng tôi đã triển khai cái gọi là “máy chủ nhảy” hoặc máy chủ chuyển tiếp. Các kết nối VPN được nâng lên trên đó, sau đó các cổng ứng dụng, cơ sở dữ liệu và các chuyển tiếp phụ trợ khác được chuyển tiếp đến mạng cục bộ của chúng tôi thông qua ssh, để dễ dàng truy cập vào các dự án của nhân viên chúng tôi mà không gặp vấn đề với kết nối VPN. Tất cả những gì bạn cần làm là thiết lập kết nối VPN với mạng công ty của chúng tôi.

Thống kê về các yêu cầu đã chỉ ra rằng thông thường, sau khi một trong các đường hầm bị lỗi (chẳng hạn như trong trường hợp mạng có sự cố, do hết thời gian chờ), mọi người sẽ liên hệ với chúng tôi về việc khôi phục quyền truy cập vào dự án. Trong hầu hết các trường hợp, chỉ cần khởi động lại kết nối là đủ và mọi thứ đều ổn. Hãy tự làm điều đó. Đây là lệnh:
Chúng tôi tiết kiệm thời gian, thần kinh và giờ làm việc

Bạn “rơi” vào mục menu mong muốn, chọn dự án của mình, đợi một chút và mọi người đều vui vẻ và hài lòng...

Khi nhận được lệnh, với một chuyển động nhẹ của byte và bit, bot sẽ kết nối với máy chủ chuyển tiếp, biết trước chuyển tiếp nào cần được khởi động lại và thực hiện công việc của nó - khôi phục kết nối với dự án. Tôi đã viết hướng dẫn để bạn có thể tự giải quyết những vấn đề như vậy. Và mọi người chỉ liên hệ với chúng tôi nếu công cụ được cung cấp không hoạt động...

/ecp_to_pem

Thống kê thêm cho thấy rằng thường cần phải chuyển đổi EDS Crypto Pro ở định dạng pem(Cơ sở64) cho nhiều tích hợp khác nhau và chúng tôi có khá nhiều tích hợp. Nhiệm vụ: lấy một thùng chứa, sao chép nó vào máy tính Windows có cài đặt tiện ích P12FromGostCSP (nhân tiện, trả phí), chuyển đổi nó thành pfx, sau đó chuyển đổi pfx bằng OpenSSL (có hỗ trợ mã hóa GOST) sang pem. Nó không thuận tiện lắm, nhưng bạn muốn nó trong tầm tay.

Google đã đến giải cứu một lần nữa. Thành lập tiện ích của một số người tốt bụng. Tôi đã tập hợp nó như được viết trong README - nó đã hoạt động. Tôi đã dạy bot cách làm việc với tiện ích này và nhận được sự chuyển đổi gần như ngay lập tức.
Chúng tôi tiết kiệm thời gian, thần kinh và giờ làm việc

Đến thời điểm thực hiện cuối cùng, lệnh đã được ban hành để chuyển sang định dạng mã hóa mới - gost-2012. Theo tôi nhớ thì tiện ích lúc đó chỉ hoạt động với GOST cũ (2001), có lẽ đó là một tiện ích tương tự khác của một người tốt bụng khác, tôi không nhớ chính xác.
Sau khi chuyển sang GOST mới, chức năng của bot đã bị xóa vì lý do bảo mật. Thực hiện nó trong một container docker.

Dockerfile, trong trường hợp có ai cần nó:

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

Để chuyển đổi, bạn cần đặt vùng chứa gốc (thư mục như xxx.000) vào thư mục /srv/in và đưa pem đã hoàn thành vào /srv/out.

Để chuyển đổi:

 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 và /emstart

Một ngày nọ, một DBA Oracle rất ngầu, có nhiều kinh nghiệm về quản trị và phát triển DBMS, đã nhận được việc làm tại công ty chúng tôi. Và anh ấy ngay lập tức gặp sự cố khi kết nối với máy chủ DBMS bằng ssh: anh ấy không biết kết nối ở đâu và như thế nào, quyền truy cập không được mô tả rõ ràng hoặc anh ấy không thể chuyển tiếp thứ gì đó mình cần cho chính mình. Vâng, chúng tôi rất vui được trợ giúp, chúng tôi đã hướng dẫn anh ấy cách kết nối và chuyển tiếp cho anh ấy Người quản lý doanh nghiệp. Nhưng mọi việc vẫn không suôn sẻ với ssh. Một trong những đồng nghiệp của tôi đã giải thích điều đó một cách đơn giản: một DBA thuần chủng :) Chúng tôi quyết định rằng nếu cần chỉnh sửa thứ gì đó trên máy chủ, chúng tôi sẽ tự mình thực hiện.

EM đôi khi gặp sự cố khi tải nặng và để khởi động lại nó... bạn cần kết nối qua ssh và khởi động lại qua thiết bị đầu cuối. “Quản trị viên rất giỏi trong việc này,” đồng nghiệp mới của chúng tôi quyết định. Tải nặng trên DBMS không phải là hiếm đối với chúng tôi và yêu cầu khởi động lại EM cũng rất phổ biến. Sau đó, kịch bản tương tự: căng thẳng, cáu kỉnh và tìm kiếm giải pháp cho vấn đề. Vì vậy, trong cùng một cuộc trò chuyện nhóm, các lệnh sau đã xuất hiện: /emstop và /emstart.

Chúng tôi tiết kiệm thời gian, thần kinh và giờ làm việc

/giết chết

Nếu có sự cạnh tranh mạnh mẽ về cơ sở dữ liệu và điều này đôi khi xảy ra thì cần phải nhanh chóng dỡ bỏ cơ sở dữ liệu. Cách nhanh nhất là loại bỏ quá trình có vấn đề... Để thực hiện việc này, hãy kết nối qua ssh, kill -9... Bot sẽ trợ giúp!

Chúng tôi tiết kiệm thời gian, thần kinh và giờ làm việc

Alexey đánh giá cao đội và đặt cho nó một cái tên trìu mến - "Kilyalka" hoặc một khẩu súng.
Một ngày nọ, sau khi xem Alexey đã cố gắng và chịu đựng như thế nào, mỗi lần nhập /kill xxx cho mỗi quy trình, tôi quyết định thêm "nhiều nòng" vào khẩu súng của mình:

Chúng tôi tiết kiệm thời gian, thần kinh và giờ làm việc

Cái đó tốt hơn! Mọi thứ đều dành cho em, Alexey, cứ làm việc đi em yêu!

Đương nhiên, một đội quan trọng như vậy bị hạn chế truy cập bởi user_id - “hoàn hảo”. Thấy cách Lesha khéo léo giết chết các tiến trình trên máy chủ cơ sở dữ liệu, một số người đã cố gắng nhập lệnh với số tiến trình ngẫu nhiên, nhưng bạn không thể đánh lừa bot thông minh của tôi, anh ta ngay lập tức từ chối.

/alertlog

Chà, để đề phòng, tôi đã ra lệnh:
/alertlog <số dòng> - lấy số dòng cảnh báo được chỉ định
Bot lấy một nhật ký cảnh báo và gửi nó đến dịch vụ của chúng tôi, như Pastebin, được gọi là pyste, rồi gửi liên kết tới phần dán tới cuộc trò chuyện yêu cầu.

/Séc

Tiếp theo là một yêu cầu cho theo dõi hiệu suất thực sự của ứng dụng của chúng tôi. Cho đến nay, bộ phận hỗ trợ kỹ thuật của dự án đã thu thập dữ liệu này theo cách thủ công. Không vấn đề! Những người thử nghiệm dũng cảm của chúng tôi đã phát triển các trường hợp thử nghiệm cho việc này. Nhật ký kiểm tra kết quả không thuận tiện cho việc đọc, người dùng thiếu kinh nghiệm sẽ mất nhiều thời gian để hiểu và không chắc chắn rằng mình sẽ làm nổi bật các thông tin cần thiết. Và chúng tôi không muốn làm bằng tay những việc mà chúng tôi không thể làm bằng tay... Một nhiệm vụ mới dành cho bot!

Chúng tôi tiết kiệm thời gian, thần kinh và giờ làm việc

Lệnh /checks hiển thị một menu đơn giản và rõ ràng; lần này các chàng trai của chúng ta đã học cách sử dụng lệnh này mà không cần hướng dẫn!

Khi bạn chọn mục mong muốn, thay vì menu, một thông báo về việc bắt đầu thử nghiệm sẽ xuất hiện để những người dùng thiếu kiên nhẫn không chạy thử nghiệm của chúng tôi 100500 lần:

Chúng tôi tiết kiệm thời gian, thần kinh và giờ làm việc

Tùy thuộc vào mục menu đã chọn, một thử nghiệm cụ thể sẽ được khởi chạy từ mạng của chúng tôi, cụ thể là từ máy nơi bot hoạt động (jmeter được định cấu hình sẵn ở đó, các thử nghiệm cần thiết được đặt...) hoặc trực tiếp từ trung tâm dữ liệu (từ một máy được chuẩn bị bên cạnh ứng dụng), để loại trừ các kết nối mạng khi kiểm tra độ trễ hoặc giảm chúng đến mức tối thiểu.

Sau khi hoàn thành bài kiểm tra và nhận được nhật ký, bot sẽ phân tích nó và tạo ra kết quả ở dạng “con người có thể đọc được”:

Chúng tôi tiết kiệm thời gian, thần kinh và giờ làm việc

Bộ sưu tập số liệu

Chức năng này đã xuất hiện và những người quản lý dự án quan tâm đã nhận được chức năng như vậy cho khu vực của họ. Và một Giám đốc Dự án đầy lòng nhân ái đã nói: “Tôi muốn có số liệu thống kê về thời gian!” Ai đó từ CIT nói với cô rằng sẽ thuận tiện hơn nếu theo dõi tất cả những điều này ở Zabbix. Zabbix, Zabbix vậy...

Tôi nghĩ rằng tôi cần chuẩn bị cho nhu cầu nhân rộng giải pháp... Tôi đưa ý tưởng vào một thùng chứa docker. Trong vùng chứa, jmeter được khởi chạy theo lịch trình (cứ sau 10 phút), đặt nhật ký ở một vị trí nhất định, php phân tích cú pháp và hiển thị dữ liệu cần thiết dưới dạng trang web. Zabbix, sử dụng khóa web.page.get, nhận trang này, thường xuyên chọn dữ liệu cần thiết cho các phần tử phụ thuộc nhất định và xây dựng biểu đồ.

Chúng tôi tiết kiệm thời gian, thần kinh và giờ làm việc

Tôi nghĩ nó hóa ra không tệ. Bằng cách quan sát biểu đồ, trước tiên, chúng tôi sẽ thấy tốc độ gần đúng của ứng dụng và nếu phát hiện thấy các đỉnh trên biểu đồ, chúng tôi sẽ biết gần đúng vị trí của “phích cắm”. Nó đơn giản. Cho đến nay, hóa ra nó chỉ có nhu cầu ở một khu vực, nhưng tôi sẵn sàng nhân rộng nó cho những ai quan tâm.

Phát triển ứng dụng

Số liệu thống kê về các nhiệm vụ tương tự gần đây đã làm nảy sinh nhiều ý tưởng hơn để đơn giản hóa và tạo điều kiện thuận lợi cho công việc. Trên một số dự án, trên máy chủ ứng dụng, cần phải cài đặt các thùng chứa Crypto Pro chính, có rất nhiều và chữ ký số sẽ hết hạn theo thời gian. Đôi khi 2 nhiệm vụ đến một ngày. Nhưng tôi cho rằng việc sử dụng bot cho những mục đích này là không an toàn và quyết định rằng tôi sẽ tạo chức năng này trực tiếp trong ứng dụng. Đương nhiên với sự cho phép và kiểm tra quyền truy cập. Nếu bạn có các đặc quyền cần thiết, một mục menu bổ sung sẽ có sẵn để làm việc với chữ ký số, cài đặt, xóa, xem thông tin, v.v. Chức năng này hiện đang được phát triển. Hóa ra, điều này không khó lắm, bạn chỉ cần đọc hướng dẫn hiện có một chút, xem các ví dụ về mã, hỏi các đồng nghiệp có kinh nghiệm phát triển hơn và sau đó thực hiện. Trong quá trình nghiên cứu, các ý tưởng nảy sinh để bổ sung vào ứng dụng. Tôi sẽ không thực hiện các kế hoạch kiểu Napoléon - có sự phát triển, hãy để mọi người lo việc riêng của mình. Nhưng mặc dù điều đó thú vị nhưng tôi lại tự mình làm việc đó.

Kế hoạch

Như tôi đã nói, nhiều ý tưởng khác nhau đã được sinh ra để sử dụng bot của chúng tôi và không chỉ - nói chung, các ý tưởng về “điểm tự động hóa”, nhiều ý tưởng trong số đó đã bị lãng quên vì tôi không có thời gian để viết chúng ra. Bây giờ tôi cố gắng viết ra tất cả những gì tôi nghĩ đến và tôi khuyên những người khác cũng nên làm như vậy.

Nhưng Alexey không quên đưa ra lời chúc của mình. Từ mới nhất:
/kill_sql SQL_ID — hủy tất cả các phiên có yêu cầu SQL_ID này
/kill_block - tắt phiên chặn root
/show_em - hiển thị hình ảnh về hiệu suất EM
Anh ta là một kẻ ranh mãnh, anh ta muốn may DBA từ điện thoại của mình =)

Đây là cách chúng tôi làm việc vì lợi ích của Tổ quốc!

Làm thế nào để bạn thoát khỏi những công việc thường ngày và không thú vị?

Tôi hy vọng bài đọc trở nên thú vị và thậm chí có thể hữu ích cho ai đó, và tôi không có thời gian làm người đọc nhàm chán... Chúc tất cả chúng ta may mắn.

Nguồn: www.habr.com

Thêm một lời nhận xét