はじめに
このチャレンジでは、スライス(Slice)を活用して、関連するログメッセージを処理・抽出するログフィルタリング機能を開発します。サイバーセキュリティの目まぐるしい変化の中で、潜在的なセキュリティ脅威を特定するためには、効率的なログフィルタリングが不可欠です。
ここでの目標は、指定されたキーワードに基づいてログメッセージをフィルタリングする filterLogs 関数を実装することです。この関数は、大文字と小文字を区別し、空のスライスや空のキーワードも適切に処理する必要があります。また、タイムスタンプなどのメタデータを除外し、メッセージの内容のみを返すように実装してください。
スライスログフィルタ関数の実装
スライスベースのログフィルタリング機能を開発し、特定のキーワードに一致するログメッセージの内容(タイムスタンプを除く)のみを抽出してください。
タスク
- ログエントリのスライスとキーワードを受け取る
filterLogs関数を実装します。 - 指定されたキーワードを含むログエントリから、メッセージ内容のみを抽出した新しいスライスを返します。
- 大文字と小文字を厳密に区別するようにしてください。
- ログエントリのフィルタリングと処理には、Go のスライス操作を使用してください。
- 空のスライスや空のキーワードが渡された場合でも、エラーにならず適切に処理できるようにします。
要件
- 実装は
~/project/logfilter.goファイルに作成してください。 - 元のスライスを変更せず、処理結果を含む新しいスライスを返すようにしてください。
- フィルタリングに外部ライブラリを使用しないでください。
- キーワードの後のメッセージ内容のみを抽出して返してください(例:
"2023-06-15 ERROR: Disk is almost full"から"Disk is almost full"のみを抽出)。 - ログの処理には文字列操作関数を使用してください。
例
以下のログエントリがあるとします:
logs := []string{
"2023-06-15 ERROR: Security breach detected",
"2023-06-15 INFO: System startup completed",
"2023-06-15 WARN: Unauthorized access attempt",
"2023-06-15 ERROR: Disk is almost full",
"2023-06-15 INFO: User login",
"2023-06-15 WARN: System temperature too high",
}
実行コマンド:
go run logfilter.go
出力結果:
Error Logs: [Security breach detected Disk is almost full]
Warning Logs: [Unauthorized access attempt System temperature too high]
Info Logs: [System startup completed User login]
ヒント
- ログの反復処理:
forループを使用して、各ログエントリを順番にチェックします。 - キーワードの検索: ログ内で
"<KEYWORD>: "というパターンを探します。 - メッセージの抽出: スライス操作(Slicing)を使用して、キーワードと
": "の後の部分を取得します。 - 空の入力への対応: ログまたはキーワードが空の場合は、空のスライスを返します。
- 結果の追加:
appendを使用して、一致したメッセージを新しいスライスに追加します。
まとめ
このチャレンジでは、指定されたキーワードに基づいて、ログ文字列のスライスから関連するメッセージ(メタデータを除く)を効率的に処理・抽出する filterLogs 関数を実装しました。この関数は、大文字と小文字を区別し、空の入力に対しても堅牢に動作します。Go のスライス操作と文字列操作を駆使して、データを適切にフィルタリングし、加工して返す能力を習得しました。



