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

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

Apr 15, 2017

Download

Technology

Daisuke Ikeda
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
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]