paint-brush
パーフェクト デューティ エンジニア@alexeysutyagin
578 測定値
578 測定値

パーフェクト デューティ エンジニア

Alexey Sutyagin10m2022/11/10
Read on Terminal Reader
Read this story w/o Javascript

長すぎる; 読むには

多くの IT 企業は、当番勤務の慣行を採用しています。この役割におけるエンジニアの職務は企業によって異なりますが、いくつかの共通点があります。優秀なエンジニアになるには、問題が発生した場合、できるだけ迅速かつ費用対効果の高い方法で問題を解決する必要があります。よく訓練されたエンジニアは、自分が対処できる場所と、状況をさらにエスカレートする価値がある場所を理解しています。この記事では、エンジニアとしての職務に十分に備える方法について説明します。

Company Mentioned

Mention Thumbnail
featured image - パーフェクト デューティ エンジニア
Alexey Sutyagin HackerNoon profile picture


序章

多くの IT 企業は、当番勤務の慣行を採用しています。技術者が勤務しており、彼の勤務はシフトの間続きます。通常、シフトは 1 日または 1 週間続きます。この期間が増減する場合もありますが、まれです。この役割におけるエンジニアの職務は企業によって異なりますが、いくつかの共通点があります。

  • チームに入ってくる質問に答えなければなりません。
  • チームが担当するサービスのパフォーマンスを監視する必要があります。
  • 火災や事件に対処するため。
  • 解決できない場合は、インシデントをさらにエスカレートしてください。

この記事では、エンジニアとしての職務に十分に備える方法について説明します。

完全当番技術者の定義

戦闘環境でシフト中に事件や火災が発生したとしても、それはあなたがひどいエンジニアであることを意味するものではありません.優秀なエンジニアになるには、問題が発生した場合、できるだけ迅速かつ費用対効果の高い方法で問題を解決する必要があります。よく訓練されたエンジニアは、自分で対処できる場所と、状況をさらにエスカレートする価値がある場所を理解しています。彼は、いつ、誰に助けを求めるべきかを知っておく必要があります。可能であれば、同じ問題が繰り返されることを許してはなりません。

経験

自分自身とチームの経験を利用して、より良い任務に備えることが役に立ちます。

インシデントを処理するために既に存在するドキュメントを調べることから始めることをお勧めします。会社またはチームレベルでのドキュメントはありますか?それがどこにあるかを知り、それに精通することが不可欠です。存在しない場合は、作成プロセスを開始していただけますか?

次に、どのインシデントがすでに発生したか、およびそれらがナレッジ ストアにどのように記録されているかを確認する価値があります。事後分析はありますか? また、修正すべきタスクはありますか?これらのタスクが実行されているかどうか知っていますか?状況を修正するためのタスクが作成されているが、実装されていない場合は、マネージャーとのミーティングでこれについて話し合う必要があります。

勤務中の技術者の職務が記録されているか知っていますか?彼らは何に責任があり、何に責任がないのでしょうか?そのようなドキュメントや理解がない場合は、チーム全体が持っていると役に立ちます。

ツール

勤務中のエンジニア向けのツールキットは特定のものであり、開発者の日常的なツールキットとは多少異なります。消防中に発生する主なタスクは、既存のクエリでは解決できないものです

これらのツールについて詳しく見てみましょう。

  1. 多くの問題を解決できる義務者のための主要な技術ツールは bash です。この美しいツールの知識がまだない場合は、クラッシュ コースのいずれかを使用してください (
  2. 多くの場合、発射モードでは、製品データベースでいくつかの操作を実行する必要があります。ターミナル経由でデータベースを操作するスキル - PostgreSQL の場合は psql https://www.postgresguide.com/utilities/psql/、MongoDBの場合は mongosh https://www.mongodb.com/docs/mongodb-shell/が役立ちます。 .これらのツールは例として提供されており、独自のデータベースを検索できます。多くのデータベースには視覚的なツールがありますが、端末はどこでも利用でき、必要なインターネットは最小限で、非常に柔軟です。射撃モードの場合、非常に便利です。
  3. curl はかなりの数のクエリを作成できるツールであり、bash の知識と組み合わせるとほぼ全能になります。

火災時に既製のスクリプトを手元に用意しておくと非常に便利です。それらは、できるだけ単純でわかりやすいものにする必要があります。はい、おそらく非常に迅速に作成できますが、時間が限られている場合は、同じタイイングを実装する方法ではなく、クラッシュについてのみ考えることができる既製のセットを用意すると便利です。以下のスクリプトは、そのようなスクリプトの潜在的な構造を表したものにすぎません。もちろん、インシデントが発生する前にコードをテストし、できるだけ単純でわかりやすいものにする必要があります。次のスクリプトがあると便利です。

提供されたデータからファイルを生成するスクリプト。これらは、他のコマンドから、または独立した要求を行うことによって取得できます。 Python でのこのようなスクリプトの例を以下に示します。

 import csv def modify(filename): tmpFile = "tmp.csv" # Reading file with data and creation of output file with open(filename, "r") as file, open(tmpFile, "w") as outFile: # Create reader for initial file reader = csv.reader(file, delimiter=',') # Create writer for output file writer = csv.writer(outFile, delimiter=',') # Read header line header = next(reader) # Write header line writer.writerow(header) # Process initial file line by line for row in reader: colValues = [] # Process each column of each line for col in row: # Let for example transform all columns to lowercase colValues.append(col.lower()) # Write modified line to final file writer.writerow(colValues) filename = 'sample_data.csv' modify(filename)

指定された並列処理で必要なエンドポイントを呼び出すスクリプト。複雑なものである必要はありません。以下は、指定された並列処理で sh ファイルを生成する簡単な JavaScript コードの例です。はい、ここには結果処理はありませんが、常に必要というわけではなく、必要に応じて結果処理バージョンでツールキットを変更できます。たとえば、データ全体を読み書きするファイルがありますが、巨大なファイル用のストリーム スクリプトを作成できます。

 const fs = require('fs'); const initialFilePath = 'sample_data.csv'; const outputFilePath = 'sample_script.sh'; const amountOfParallelRequests = 5; // Remember about the throughput and the bandwidth of your services const delimiterForCSV = ','; // Read the initial file and split it by lines // You could transform it to an object if it's relevant to your situation let initialFile = fs.readFileSync(initialFilePath).toString().split('\n'); // Prepare boilerplate for sh script let outputString = '#!/bin/bash\n\n'; // Write data with parallel execution // Skip header for CSV // The code for parallel requests was received from https://serverfault.com/questions/456490/execute-curl-requests-in-parallel-in-bash // and you could implement your version instead for (let i = 1; i < initialFile.length; i++){ let line = initialFile[i]; if (!line) { continue; } let processedLine = line.split(delimiterForCSV); // We don't implement processing of errors here // Let's suggest that the necessary for request value lies in second column let desiredValue = processedLine[1]; if (desiredValue === undefined) { console.error('We have a trouble ' + line); } outputString += `curl -s -o foo http://example.com/file${desiredValue} && echo "done with ${desiredValue}" &\n`; if (i % amountOfParallelRequests === 0 || i === initialFile.length - 1) { outputString += '\nwait\n\n'; } } fs.writeFileSync(outputFilePath, outputString); // Indicate the success console.log('Success');

データベースまたはサービスから何かを取得し、変換された結果を戻すか、別のエンドポイントを呼び出すスクリプト。認証と適切な使用シナリオを忘れずに、自分で実装することをお勧めします。

知識

道具や経験に加えて、ある程度の知識があると仕事に役立ちます。

サービスのログとメトリクスについて知りたいです。彼らはどこに行き、どうやってそこにたどり着くのですか?これらのツールの使い方を知っていますか?夜間にオンコール サービスから電話がかかってきて、サービスがダウンしていることを伝えられた場合は、何が問題なのかをすばやく発見することが最善の方法です。そのためには、メトリクスとログがどこに保存されているか、最初に何を調べるかを正確に知る必要があります。

アラートを延期するには?インシデントを分析した後、現在の事故が朝を待っている可能性があることが判明することが多いため、アラートを延期する方法を理解しておくとよいでしょう。一部の操作の場合は再度通知されるため、閉じませんが、正確には延期します。通常の勤務日を開始したらすぐに、状況に対処して修正するか、アラートを出すことを忘れないでください。

連絡先はどこにありますか、または同僚や他のチームのメンバーとどのように連絡を取りますか?頭の中に明確なツールまたは知識がなければなりません - それが起こったときの状況を理解している/知っているはずです.専門家はインシデントの解決を支援できますが、利害関係者は何かがうまくいかないことを知る必要があります。多くの人が営業時間外のオフィス チャットからの通知をオフにしているため、連絡先 (理想的には電話) にアクセスできる必要があります。

アクセスレベルが存在する場合、本番/データベースへのアクセスを取得し、アクセスを増やすにはどうすればよいですか?アクセス権がない場合は、必要なアクセス権を取得するために誰に連絡すればよいか、または何をすべきかを知る必要があります。

コードを迅速に本番環境に導入するにはどうすればよいですか?場合によっては、本番環境でサービス コードをすばやく変更する必要がある問題が発生します。一般に、これは正しくない習慣と見なされますが、多くの場合、緊急時にはそうではありません。長い E2E テストを待ちたくないが、コードをすぐに運用環境に導入する必要がある場合があります。これを行う方法を理解していただきたいと思います。

データベースにはどのようなデータが保存されますか?製品内およびサービス間のデータ移動のスキームはありますか?データベースを操作する必要がある場合は、データが特定のサービスでどのように編成されているか、データがどこから来て、誰がそれを使用しているかを知っておくとよいでしょう。これにより、問題が発生した場合でも、より迅速に対処できます。

道具や経験に加えて、ある程度の知識があると仕事に役立ちます。

サービスのログとメトリクスについて知りたいです。彼らはどこへ行き、どうやってそこにたどり着くのでしょうか?これらのツールの使い方を知っていますか?夜間にオンコール サービスから電話がかかってきて、サービスがダウンしていることを伝えられた場合は、何が問題なのかをすばやく発見することが最善の方法です。そのためには、メトリクスとログがどこに保存されているか、最初に何を調べるかを正確に知る必要があります。

アラートを延期するには?インシデントを分析した後、最近の事故が朝を待っている可能性があることが判明することが多いため、アラートを延期する方法を理解しておくとよいでしょう。一部の操作の場合、再度通知されるため、閉じませんが、正確には延期します。通常の勤務日を開始したらすぐに、状況に対処して修正するか、アラートを出すことを覚えておくとよいでしょう。

連絡先はどこにありますか、または同僚や他のチームのメンバーとどのように連絡を取りますか?正確なツールまたは知識が頭の中にある必要があります-それが起こったときの状況を理解している/知っているはずです.専門家はインシデントの解決を支援できますが、利害関係者は何かがうまくいかないことを知る必要があります。多くの人が営業時間外のオフィスチャットからの通知をオフにしているため、連絡先、理想的には電話にアクセスできる必要があります.

アクセスレベルが存在する場合、本番/データベースへのアクセスを取得し、アクセスを増やすにはどうすればよいですか?アクセスが必要な場合は、必要なアクセスを取得するために誰に連絡すればよいか、または何をすべきかを知る必要があります。

コードを迅速に本番環境に導入するにはどうすればよいですか?場合によっては、本番環境でサービス コードをすばやく変更する必要がある問題が発生します。一般に、これは正しくない習慣と見なされますが、多くの場合、緊急時にはそうではありません。長い E2E テストの前に、コードを本番環境にすばやく導入したい場合があります。これを行う方法を理解していただきたいと思います。

データベースにはどのようなデータが保存されますか?製品内およびサービス間のデータ移動のスキームはありますか?データベースを操作する必要がある場合は、データが特定のサービスでどのように編成されているか、データがどこから来て、誰がそれを使用しているかを知っておくとよいでしょう。これにより、問題が発生した場合に迅速に対処できます。

結論

優れたエンジニアリング文化を持つ企業やチームでも、勤務中の事故や火災は発生します。これを避けるために、チームは現在のプロセスと製品を改善するためにあらゆる努力をしなければなりません。とはいえ、エンジニア一人一人が事故が起こることを覚悟し、緊急に対処しなければなりません。これを行うには、蓄積された個人およびチームの経験をすべて使用する価値があります。組織とサービスについて知り、ツールキットに自信を持つことは、知っておく価値があります。

便利なリンク

https://zach-gollwitzer.medium.com/the-ultimate-bash-crash-course-cb598141ad03

https://www.youtube.com/watch?v=oxuRxtrO2Ag

https://www.postgresguide.com/utilities/psql/

https://www.mongodb.com/docs/mongodb-shell/