読者です 読者をやめる 読者になる 読者になる

tech.guitarrapc.cóm

C#, PowerShell, Unity, Cloud, Serverless Technical Update and Features

SumoLogic API を PowerShell で利用する

SumoLogic は SasS 型のログ分析ツールです。 なぜ ログ分析 サービスを SaaS型 や他いろいろなもので利用するかというと、

  • 膨大な量のログ分析
  • 収集したログの管理 (リテンション、取得)
  • 一貫したコンソール画面の提供

などがあるでしょう。 さて、運用していくと手間だと感じやすいのがこれです。

取得するコレクターやログの設定管理

例えば、 SumoLogic は、 SaaS型であり 取得するログの指定は以下の2つ方法があります。

  1. Collector にインストールしたホストでSource設定をJson指定
  2. Web管理画面で指定した Source を取得

直にサーバーの設定を触るのは極力避けたいわけです。 今回紹介するのは、Web管理画面への SumoLogic API を叩くことで、 Web管理画面での Collector やSource管理を簡単にしよう作戦です。 何しろ SumoLogic は Web管理画面での 使わなくなった Collector や Source のBulk 削除、Sourceをまとめて追加などは対応していないので! ====

SumoLogic API

公式ホームページのAPI入り口はこちら

APIs

じつはGitHub上に公開されています。

Collector と Source 管理 : Collector Management API 検索 API : Search API

今回は、 Collector と Source 管理を見てみましょう。

GitHub

Source の削除など全然たりない未実装ですが、 Collector や Source 取得が容易になるように Module を作っています。

guitarrapc/PSSumoAPI

利用前提

  1. SumoLogic アカウント
  2. 一台のWindows や Linux に Sumo Collector をインストールする

事前にアカウントは作って下さいませー。 Module は Collector と Source が対象ですん。 (Source は 取得と追加のみですが) Help はまだ作っていないです *1 { Write-Verbose "Calling Sumo API to get current Collectors" $Collectors = Get-SumoApiCollectors -Credential $credential Write-Host "Now you have $($collectors.count) collectors objects." -ForegroundColor Cyan } else { Write-Host "Using existing colletors. skip Get-SumoApiCollectors." -ForegroundColor Cyan } # Display Collector OS Write-Host "Display Collectors group by osName" -ForegroundColor Cyan $Collectors | group osName -NoElement

などがあります。疲れたので全部はしません。

Module に足していないSumoLogic API

例えば、 Source の登録です。 以下のようなスクリプトで現在は可能ですが、これは Module に追加する予定です。

$user ="Input UserName"
$credential = Get-SumoCredential -User $user -force

$Collectors = Get-SumoApiCollectors -Credential $credential

$sets = @(
    ("LogName","LogPath","Desctiption"),
    ("LogName","LogPath","Desctiption")
)

$jsons = $sets `
    | %{ @{ 
        source = @{ 
            pathExpression = $_[1]
            name = $_[0]
            sourceType = "LocalFile"
            category = $_[0]
            description = $_[2]
            alive = $true
            states = ""
            automaticDateParsing = $true
            timeZonne = "Asia/Tokyo"
            multilineProcessingEnabled = $true
        }} ` | ConvertTo-Json
        }


$osName = "Windows Server 2012"
$name = "hogehoge*"

$collectors `
    | where osName -eq $osName `
    | where Name -like $name `
    | %{
    try
    {
        foreach ($json in $jsons)
        {
            Invoke-RestMethod -Method Post -Uri "https://api.sumologic.com/api/v1/collectors/$($_.id)/sources/" -Credential $cred -ContentType "application/json" -Body $json -ErrorAction Stop
        }
    
    }
    catch
    {
        throw $_
    }

}

他にも 「現在利用しなくなった Collector の削除」などが可能なサンプルを置いておきます。参考にどうぞ。

https://github.com/guitarrapc/PS-SumoAPI/tree/master/Sample

まとめ

API 叩いてサクッと出来るのは楽ちんです。 自分が使うものから実装しますが (てへぺろ Source登録などは、 Workflow なり 並列化しないと現状は遅いのですけど。 ぜひ SumoLogic を使ってみてください。

*1:

コマンド一覧

全然すくにゃい...... 足さなきゃ。

CommandType Name                        ModuleName
----------- ----                        ----------
Function    Get-SumoApiCollectors       PS-SumoAPI
Function    Get-SumoApiCollectorsSource PS-SumoAPI
Function    Get-SumoCredential          PS-SumoAPI
Function    New-SumoCredential          PS-SumoAPI
Function    Remove-SumoApiCollectors    PS-SumoAPI

利用例

ReadMe は後で埋めるので.....とりあえず簡単に紹介を。

認証作成 : New-SumoCredential

SecureStringPassで Module パスに一時保管しています。 ※違うPC や ユーザーではデクリプトできません。 消去 Clear や 変更Set はなく 作成New のみなのですが (SetはNewで上書きでも) ご容赦を。 使い方:

NAME
    New-SumoCredential
    
SYNTAX
    New-SumoCredential [[-save] <string>] [[-User] <string>]  [<CommonParameters>]
    
    
PARAMETERS
    -User <string>
        
        Required?                    false
        Position?                    1
        Accept pipeline input?       false
        Parameter set name           (All)
        Aliases                      None
        Dynamic?                     false
        
    -save <string>
        
        Required?                    false
        Position?                    0
        Accept pipeline input?       false
        Parameter set name           (All)
        Aliases                      None
        Dynamic?                     false
        
    <CommonParameters>
        This cmdlet supports the common parameters: Verbose, Debug,
        ErrorAction, ErrorVariable, WarningAction, WarningVariable,
        OutBuffer and OutVariable. For more information, see 
        about_CommonParameters (http://go.microsoft.com/fwlink/?LinkID=113216). 
    
    
INPUTS
    None
    
    
OUTPUTS
    System.Object
    
ALIASES
    None
    

REMARKS
    None
  1. save : 認証を保存するパスを指定可能です。デフォルトはモジュールパスです。
  2. User : 認証に利用するユーザーを指定します。

こんな感じで認証を作っておきます。

$user ="Input UserName"

# First time to create Credential
New-SumoCredential -User $user

認証読み込み : Get-SumoCredential

New-SumoCredential で生成した認証情報を読み込みます。 使い方:

NAME
    Get-SumoCredential
    
SYNTAX
    Get-SumoCredential [[-save] <string>] [-User] <string> [-force]  [<CommonParameters>]
    
    
PARAMETERS
    -User <string>
        
        Required?                    true
        Position?                    1
        Accept pipeline input?       false
        Parameter set name           (All)
        Aliases                      None
        Dynamic?                     false
        
    -force
        
        Required?                    false
        Position?                    Named
        Accept pipeline input?       false
        Parameter set name           (All)
        Aliases                      None
        Dynamic?                     false
        
    -save <string>
        
        Required?                    false
        Position?                    0
        Accept pipeline input?       false
        Parameter set name           (All)
        Aliases                      None
        Dynamic?                     false
        
    <CommonParameters>
        This cmdlet supports the common parameters: Verbose, Debug,
        ErrorAction, ErrorVariable, WarningAction, WarningVariable,
        OutBuffer and OutVariable. For more information, see 
        about_CommonParameters (http://go.microsoft.com/fwlink/?LinkID=113216). 
    
    
INPUTS
    None
    
    
OUTPUTS
    System.Object
    
ALIASES
    None
    

REMARKS
    None
  1. User : 認証に利用するユーザーを指定します。

こんな感じで認証を読み込みます。

$user ="Input UserName"
$credential = Get-SumoCredential -User $user -force

Collector の取得 : Get-SumoApiCollectors

Collector 一覧を取得します。 使い方:

NAME
    Get-SumoApiCollectors
    
SYNTAX
    Get-SumoApiCollectors [[-CollectorIds] <string[]>] [[-CollectorUri] <string>] [[-RootUri] <string>] [-Credential] <pscredential>  [<CommonParameters>]
    
    
PARAMETERS
    -CollectorIds <string[]>
        
        Required?                    false
        Position?                    0
        Accept pipeline input?       true (ByValue, ByPropertyName)
        Parameter set name           (All)
        Aliases                      None
        Dynamic?                     false
        
    -CollectorUri <string>
        
        Required?                    false
        Position?                    1
        Accept pipeline input?       false
        Parameter set name           (All)
        Aliases                      None
        Dynamic?                     false
        
    -Credential <pscredential>
        
        Required?                    true
        Position?                    3
        Accept pipeline input?       false
        Parameter set name           (All)
        Aliases                      None
        Dynamic?                     false
        
    -RootUri <string>
        
        Required?                    false
        Position?                    2
        Accept pipeline input?       false
        Parameter set name           (All)
        Aliases                      None
        Dynamic?                     false
        
    <CommonParameters>
        This cmdlet supports the common parameters: Verbose, Debug,
        ErrorAction, ErrorVariable, WarningAction, WarningVariable,
        OutBuffer and OutVariable. For more information, see 
        about_CommonParameters (http://go.microsoft.com/fwlink/?LinkID=113216). 
    
    
INPUTS
    System.String[]
    
    
OUTPUTS
    System.Object
    
ALIASES
    None
    

REMARKS
    None
  1. CollectorIds : Colelctor のIDを指定可能です。指定が無ければ全て取得します。
  2. Credential : Get-SumoCredential で読み込んだ認証情報を指定してください。

Invoke-RestMethod で Get を送っています。 利用はこのような形で。

$user ="Input UserName"
$credential = Get-SumoCredential -User $user -force


# Obtain Collectors
if (($collectors.Length -ne $null) -and ($(Read-Host "Do you want to get new collectors? (y/n)") -eq "y"