26
インフラ運用管理ツール Golang TIS株式会社 池田 大輔

インフラ運用管理ツールとGolang OSS運用管理勉強会LT

Embed Size (px)

Citation preview

Page 1: インフラ運用管理ツールとGolang OSS運用管理勉強会LT

インフラ運用管理ツールと

GolangTIS株式会社

池田 大輔

Page 2: インフラ運用管理ツールとGolang OSS運用管理勉強会LT

Hello!I am Daisuke IKEDA (@ike_dai)TIS Inc. OSS Promotion Office.

Zabbix Specialist

Page 3: インフラ運用管理ツールとGolang OSS運用管理勉強会LT

Golang?

Ref. https://golang.org/

Googleが開発するOSSのプログラミング言語

Page 4: インフラ運用管理ツールとGolang OSS運用管理勉強会LT

Shellスクリプトで運用のための処理プログラム作ったり

e.g.AWS操作用スクリプト

DBバックアップ用スクリプト

That happens

Page 5: インフラ運用管理ツールとGolang OSS運用管理勉強会LT

・スクリプトを動かすためにツール等が必要

・Shellスクリプトでの処理の面倒さ

 (JSONやXMLのパースとか)

What’s concern?

Page 6: インフラ運用管理ツールとGolang OSS運用管理勉強会LT

Golangってどうよ?

Page 7: インフラ運用管理ツールとGolang OSS運用管理勉強会LT

1One binary file

Golang builds one binary file.

Page 8: インフラ運用管理ツールとGolang OSS運用管理勉強会LT

Easy build

$ go build sample.go$ ls -lh-rwxr-xr-x 1 ike_dai staff 2.2M 4 19 23:35 sample-rw-r--r-- 1 ike_dai staff 77B 4 19 23:35 sample.go$ ./sampleHello World$ go run sample.go

package mainimport "fmt"

func main() {fmt.Println("Hello World")

}

※都度buildしなくてもgo runで即時実行可

Page 9: インフラ運用管理ツールとGolang OSS運用管理勉強会LT

2Cross platform

The same code for Linux, Windows, MacOS

Page 10: インフラ運用管理ツールとGolang OSS運用管理勉強会LT

Cross Compile

$ GOOS=linux GOARCH=amd64 go build sample.go

Linux

Windows

MacOS

$ GOOS=windows GOARCH=amd64 go build sample.go

$ GOOS=darwin GOARCH=amd64 go build sample.go

Page 11: インフラ運用管理ツールとGolang OSS運用管理勉強会LT

3Various library

Golang have so many efficient libraries.

Page 12: インフラ運用管理ツールとGolang OSS運用管理勉強会LT

[Golang標準ライブラリ] flag : コマンドライン引数処理

log : ログ出力

net: ネットワーク通信関連処理

time: 時刻処理

encoding/json : JSON形式のデータ処理

encoding/xml : XML形式のデータ処理

Golang library

Page 13: インフラ運用管理ツールとGolang OSS運用管理勉強会LT

[Zabbix]Zabbix API library

https://github.com/AlekSi/zabbix

Zabbix Senderhttps://github.com/AlekSi/zabbix-sender

Golang library

Page 14: インフラ運用管理ツールとGolang OSS運用管理勉強会LT

[AWS]AWS API library (AWS official)

https://github.com/aws/aws-sdk-go

Golang library

Page 15: インフラ運用管理ツールとGolang OSS運用管理勉強会LT

なければ作ればいい

[JobScheduler] JobScheduler API library

https://github.com/ike-dai/go-jobscheduler

Golang library

Page 16: インフラ運用管理ツールとGolang OSS運用管理勉強会LT

Go DocGitHubにコミットすれば自動的にコメントの内容やメソッド、構造体をもとにドキュメントサイトが生成

https://godoc.org/github.com/ike-dai/go-jobscheduler/jobscheduler

Page 17: インフラ運用管理ツールとGolang OSS運用管理勉強会LT

4Rich compiler

Golang compiler is so kind.

Page 18: インフラ運用管理ツールとGolang OSS運用管理勉強会LT

Go Compiler単純に動く動かないの構文チェックだけじゃなく

 ・使っていないパッケージをimportしていることを指摘とか

 ・使っていないのに変数定義していることを指摘とか

Code Build resultpackage main

import "fmt"

func main() {

sample_var := "test"fmt.Println("Hello World")

}

$ go build sample.go # command-line-arguments./sample.go:6: sample_var declared and not used

Page 19: インフラ運用管理ツールとGolang OSS運用管理勉強会LT

5Easy Parallel processing

Go routine and channel architecture.

Page 20: インフラ運用管理ツールとGolang OSS運用管理勉強会LT

Go routine & channel関数にgoつけて実行するだけで非同期並列処理化

並列処理間のデータ連携にはchannelで送受信

package mainimport "fmt"

func main() {fmt.Println("Hello World")ch := make(chan int)

go backend_process(ch)receive := <-chfmt.Println(receive)

}

func backend_process(ch chan int) {fmt.Println("Backend Process")ch <- 1

}

$ go run sample.goHello WorldBackend Process1

Page 21: インフラ運用管理ツールとGolang OSS運用管理勉強会LT

Go routine & channel関数にgoつけて実行するだけで非同期並列処理化

並列処理間のデータ連携にはchannelで送受信

package mainimport "fmt"

func main() {fmt.Println("Hello World")ch := make(chan int)

go backend_process(ch)receive := <-chfmt.Println(receive)

}

func backend_process(ch chan int) {fmt.Println("Backend Process")ch <- 1

}

$ go run sample.goHello WorldBackend Process1

複数処理を並行でバックエンド処理させるのが簡単

Page 22: インフラ運用管理ツールとGolang OSS運用管理勉強会LT

I tried!

Page 23: インフラ運用管理ツールとGolang OSS運用管理勉強会LT

ZabbixでAWSの状況を監視するテンプレートAWSとZabbixとの連携処理をGolangで実装

1コマンドで処理可能

・EC2インスタンスの情報取得

・CloudWatchの情報取得

・Zabbix Senderプロトコルを話してZabbixに連携

ZAWS (Zabbix AWS monitoring template)

https://github.com/ike-dai/zaws

Page 24: インフラ運用管理ツールとGolang OSS運用管理勉強会LT

Case運用管理系ツール展開のHashicorp社のGolangツール

・Serf・Consul・Terraform・Otto・Nomad

DockerもGolang製

Page 25: インフラ運用管理ツールとGolang OSS運用管理勉強会LT

Conclusion

Let’s try together!

ノウハウ等、まだ少ないところはあるが可能性は十分あり

さくっと試して日頃の業務を改善するには便利

作ったものを配布、敷居低く試してもらうにはもってこい!

Page 26: インフラ運用管理ツールとGolang OSS運用管理勉強会LT

Thanks!Any questions?

You can find me at @ike_dai & [email protected]