ãŠãããŒãµã«ã³ã³ããåãäžçãæ¯é
ããŸãã ãã®æµè¡ã¯ç§ãåé¿ããŸããã§ããããããŠä»ãéå»6ã¶æéãç§ã¯äžè¬çã«æµè¡èªDevOpsãšåŒã°ãããã®ããã£ãŠããŸãã ç§ãè¡ããããžã§ã¯ãã§ã¯ã
Dockerã䜿çšããããšã決å®ããŸãããããã«ãããã¢ããªã±ãŒã·ã§ã³ããããã€ã«å±éããããã»ã¹ãåçŽã«ãªããæåã©ããã仿¥ã®æµè¡ã«å£ããªãå¥ã®ãã¬ã³ããã€ãŸããã€ã¯ããµãŒãã¹ã¢ãŒããã¯ãã£ã«è¿œéããããšã«ãªããŸãã ããæç¹ã§ãå®å
šã«å±éºãªçæ¯å°ã§çãšæ»ã®çµ±èšãåéããããšã¯è¯ãããšã ãšæ°ã¥ããŸãã ããŸããšããŠãä»äºã§äœ¿çšããããŒã«ãåŠã³ãã¡ã€ã³ããã°ã©ãã³ã°èšèªã§ã¯ãªãäœããæžããŠããªãã·ã§ã³ã§ããã䟿å©ãªããšãããŠãã ããã
ãã®èšäºã§ã¯ãã³ã³ããã®ã©ã€ããµã€ã¯ã«çµ±èšãç£æ»ããã³åéããããã®ãããžã§ã¯ãã3æ©ãš1æ©ã§ã©ã®ããã«éçºããããã説æããŸãã
åå
Googleã§ç°¡åã«æ€çŽ¢ããŠããæ¢æã®ãœãªã¥ãŒã·ã§ã³ãèŠã€ããããšã¯ã§ããªãã£ãã®ã§ãèªåã§è§£æ±ºããŸãã
å¿
èŠãªãã®ïŒ
- åäžã®ã³ã³ããã®éå§ãšåæ¢ã®ç£èŠ
- ããã€ãã®ã¹ãã¢ã«ã€ãã³ãã¡ãã»ãŒãžãéä¿¡ãã
- ã€ãã³ããšãã®åŸã®åæã衚瀺ããããã®äŸ¿å©ãªããŒã«
æåã®ã¿ã¹ã¯ã¯ã
ç»é²è
ã«ãã£ãŠè§£æ±ºãããŸãã ããã¯ãGliderLabsã®ãœãªã¥ãŒã·ã§ã³ã§ããConsulãNetflix Eurikaãªã©ã®æ§æã¹ãã¬ãŒãžã·ã¹ãã ã«ã³ã³ãããŒãèªåçã«ç»é²ã§ããŸãã æ®å¿µãªãããåŸè
ã¯å®å
šã«ç°ãªãã¿ã¹ã¯ã®ããã«æçãããŠããŸãïŒçŸåšå©çšå¯èœãªãµãŒãã¹ãšããããå®è£
ããã³ã³ããã¯ã©ãã«ããããèšãããšã§ãã
åã€ãã³ãïŒã³ã³ããã®èµ·åãŸãã¯åæ¢ïŒãå¿
èŠãªãã¹ãŠã®æäœãå®è¡ã§ããç¹å®ã®ãã°ã®ã¬ã³ãŒããšèŠãªãå ŽåãElasticSearchã䜿çšããŠãããã®ã¬ã³ãŒããä¿åããKibanaããªã¢ã«ã¿ã€ã ã§è¡šç€ºããã³åæã§ããŸãã
2çªç®ã®ãã€ã³ãã解決ããããšãã€ãŸããã¬ãžã¹ãã©ãšãšã©ã¹ãã£ãã¯ã®éã«ãã³ãã«ãäœæããããšã¯æ®ããŸãã
ã¬ãžã¹ãã©ã¯ã©ãã§ãã
ãšã³ã¿ãŒãã€ã³ã¡ã³ãã¯ãã©ãŒã¯ã§å§ãŸãããããªããžããªã®GitHubã®ãã¿ã³ïŒhttps://github.com/gliderlabs/registratorïŒãã¯ãªãã¯ããŠãã ããã ããŒã«ã«ãã·ã³ã§ã¯ããŒã³ãäœæããå
容ã確èªããŸãã
registrator.go // modules.go // (consul, etcd ..) Dockerfile // docker- Dockerfile.dev // dev- /bridge // /consul // consul
ã¹ããŒã ã¯åçŽã§ãã registrator.goã§ã¯ããœã±ããããªãã¹ã³ããDockerã¯ã©ã€ã¢ã³ããäœæãããã€ãã³ããçºçãããšïŒã³ã³ãããŒã®éå§ã忢ããŸãã¯çµäºïŒãã³ã³ãããŒã®èå¥åãšããã«é¢é£ä»ããããã€ãã³ããããªããžã«æž¡ããŸãã ã¢ããã¿ïŒã¢ãžã¥ãŒã«ïŒã¯ãã¢ããªã±ãŒã·ã§ã³ã®èµ·åæã«æå®ãããããªããžå
ã«äœæãããã³ã³ããã«é¢ãã詳现æ
å ±ã¯ãåŸç¶ã®åŠçã®ããã«æ¢ã«éä¿¡ãããŠããŸãã ãããã£ãŠãElasticSearchã«ããŒã¿ãéä¿¡ããæ°ããã¢ãžã¥ãŒã«ã远å ããã ãã§ååã§ãã
éçºãã
ã³ãŒããæžãåã«ããããžã§ã¯ãããã«ãããŠå®è¡ããŠã¿ãŸãããã Makefileã«ã¯ãæ°ããDockerã€ã¡ãŒãžãäœæããŠèµ·åããã¿ã¹ã¯ããããŸãã
dev: docker build -f Dockerfile.dev -t $(NAME):dev . docker run --rm --net host \ -v /var/run/docker.sock:/tmp/docker.sock \ $(NAME):dev /bin/registrator consul:
consulã¯ããããããã©ã«ãã®ãã¹ã¿ãŒã·ã¹ãã ã§ãããããããªããšã¢ããªã±ãŒã·ã§ã³ãåäœããªãããšã瀺åããŠããŸãã ã¹ã¿ã³ãã¢ãã³ã¢ãŒãã®dockerã³ã³ãããŒã«é
眮ããŸãã
$ docker run -p 8400:8400 -p 8500:8500 -p 53:53/udp \ -h node1 progrium/consul -server -bootstrap
次ã«ãã¬ãžã¹ãã©ãŒã¢ã»ã³ããªãå®è¡ããŸãã
make dev
ãã¹ãŠãé 調ã«é²ãã å ŽåïŒæ®å¿µãªããéã¯ãã®ãããªãã®ã§ãïŒã次ã®ãããªãã®ã衚瀺ãããŸãã
2015/04/04 19:55:48 Starting registrator dev ... 2015/04/04 19:55:48 Using elastic adapter: consul:// 2015/04/04 19:55:48 Listening for Docker events ... 2015/04/04 19:55:48 Syncing services on 4 containers 2015/04/04 19:55:48 ignored: cedfd1ae9f68 no published ports 2015/04/04 19:55:48 added: b4455d0f7d50 ubuntu:kibana:80 2015/04/04 19:55:48 added: 3d598d184eb6 ubuntu:nginx:80 2015/04/04 19:55:48 ignored: 3d598d184eb6 port 443 not published on host 2015/04/04 19:55:48 added: bcad15ac5759 ubuntu:determined_goldstine:9200 2015/04/04 19:55:48 added: bcad15ac5759 ubuntu:determined_goldstine:9300
ã芧ã®ãšããã4ã€ã®ã³ã³ããããããŸããã ãã®ãã¡ã®1ã€ã«ã¯ããŒãããããŸããã§ãããããã1ã€ã«ã¯ããŒã443ãå
¬éãããŠããŸããã§ããã ãµãŒãã¹ãå®éã«è¿œå ãããããšã確èªããã«ã¯ãdigãŠãŒãã£ãªãã£ã䜿çšã§ããŸã
dig @localhost nginx-80.service.consul
nginxã¯ããã€ãã®ããŒããå
¬éãããããã³ã³ããåã«-80ã远å ããå¿
èŠããããConsulã®èгç¹ããã¯ããããã¯ç°ãªããµãŒãã¹ã§ãã
ãã®ãããã¬ãžã¹ãã©ãç«ã¡äžããŸãããã€ãŸããã³ãŒãã®èšè¿°ãéå§ãããšãã§ãã
è¡ãè¡ã
ããŸããŸãªããã¯ãšã³ãçšã®ãããžã§ã¯ãã®ã¢ããã¿ãŒã¯ãåå¥ã®ã¢ãžã¥ãŒã«ãšããŠå®è£
ãããŸãã äžè¬ã«ãGoã¢ãžã¥ãŒã«ã¯éåžžã«è峿·±ããã®ã§ãã ããŒã«ã«ãã©ã«ããŒãŸãã¯GitHubäžã®ãããžã§ã¯ãã®ã©ã¡ãã§ãããŸããŸããããæ¥ç¶ã«å®è³ªçãªéãã¯ãããŸããã
ãããžã§ã¯ãã®ã«ãŒãã«æ°ãããã©ã«ããŒã远å ããŸãïŒ/ elasticãšãå°æ¥ã®å®è£
ããã®ãã¡ã€ã«elastic.goãé
眮ããŸãã
ã¢ãžã¥ãŒã«ã®ããã©ã«ãåãä»ããŸããã
package elastic
å¿
èŠãªãµãŒãããŒãã£ããã±ãŒãžãã€ã³ããŒãããŸãã
import ( "net/url" "errors" "encoding/json" "time" "github.com/gliderlabs/registrator/bridge" elasticapi "github.com/olivere/elastic" )
ã€ãã³ããåŠçããã«ã¯ãã€ã³ã¿ãŒãã§ãŒã¹ãå®è£
ããå¿
èŠããããŸã
type RegistryAdapter interface { Ping() error
ã¢ããã¿ãŒã¯ãã¢ãžã¥ãŒã«ã®ããŒãæã«å®è¡ãããinitïŒïŒã¡ãœãããä»ããŠç»é²ãããŸãã
func init() { bridge.Register(new(Factory), "elastic") }
ã¢ããã¿ãŒãäœæããå ŽåãElasticSearchã®ã¯ã©ã€ã¢ã³ãã€ã³ã¹ã¿ã³ã¹ãäœæããå¿
èŠããããŸãã
func (f *Factory) New(uri *url.URL) bridge.RegistryAdapter { urls := "http://127.0.0.1:9200" if uri.Host != "" { urls = "http://"+uri.Host } client, err := elasticapi.NewClient(elasticapi.SetURL(urls)) if err != nil { log.Fatal("elastic: ", uri.Scheme) } return &ElasticAdapter{client: client} } type ElasticAdapter struct { client *elasticapi.Client }
isRunningïŒïŒã¡ãœããã䜿çšããŠãã€ã³ã¹ã¿ã³ã¹ããŸã çããŠããããšã確èªããŸãã
func (r *ElasticAdapter) Ping() error { status := r.client.IsRunning() if !status { return errors.New("client is not Running") } return nil }
ã³ã³ããã¬ã³ãŒããæ¬¡ã®æ§é ã«ããŸãã
type Container struct { Name string `json:"container_name"` Action string `json:"action"`
ã³ã³ããç»é²ã¡ãœãããå®è£
ããŸãã
func (r *ElasticAdapter) Register(service *bridge.Service) error
jsonã®ãã¹ãŠã®ãµãŒãã¹æ
å ±ããã³ãããŸãã
serviceAsJson, err := json.Marshal(service) if err != nil { return err }
çŸåšã®æå»ãååŸããŸãã Goã¯ã楜ããè¡šèšæ³ã䜿çšããŠæ¥ä»åœ¢åŒã決å®ããŸã
timestamp := time.Now().Local().Format("2006-01-02T15:04:05.000Z07:00")
æ°ãããã°ãšã³ããªãäœæããŸãã
container := Container { Name: service.Name, Action: "start", Message: string(serviceAsJson), Timestamp: timestamp }
ãããŠãç¹å¥ã«äœæãããã€ã³ããã¯ã¹ã«éä¿¡ããŸã
_, err = r.client.Index(). Index("containers"). Type("audit"). BodyJson(container). Timestamp(timestamp). Do() if err != nil { return err }
ç»é²è§£é€æ©èœã¯ãåã®æ©èœãå®å
šã«ç¹°ãè¿ããŸãããç°ãªãã¢ã¯ã·ã§ã³ãå¿
èŠã§ãã
Makefileã§consulãelasticã«å€æŽããmodules.goã«ã¢ãžã¥ãŒã«ãç»é²ããŸãã
ãã¹ãŠäžç·ã«ä»
ElasticSearchãèµ·åããŸã
docker run -d --name elastic -p 9200:9200 \ -p 9300:9300 dockerfile/elasticsearch
Kibanaãã€ã³ããã¯ã¹ã§æ£ããæ©èœããããã«ã¯ãlogstashããè¥å¹²åèšèšããããã³ãã¬ãŒãã远å ããå¿
èŠããããŸãã
{ "template" : "containers*", "settings" : { "index.refresh_interval" : "5s" }, "mappings" : { "_default_" : { "_all" : {"enabled" : true}, "dynamic_templates" : [ { "string_fields" : { "match" : "*", "match_mapping_type" : "string", "mapping" : { "type" : "string", "index" : "analyzed", "omit_norms" : true, "fields" : { "raw" : {"type": "string", "index" : "not_analyzed", "ignore_above" : 256} } } } } ], "_ttl": { "enabled": true, "default": "1d" }, "properties" : { "@version": { "type": "string", "index": "not_analyzed" }, "geoip" : { "type" : "object", "dynamic": true, "path": "full", "properties" : { "location" : { "type" : "geo_point" } } } } } } }
Kibanaãèµ·åãã
docker run -d -p 8080:80 -e KIBANA_SECURE=false \ --name kibana --link elastic:es \ balsamiq/docker-kibana
ã¬ãžã¹ãã©ãéå§ããŸãã
make dev
ãœãªã¥ãŒã·ã§ã³ããã¹ãããããã«nginxã§ã³ã³ãããéå§ããŸã
docker run -d --name nginx -p 80:80 nginx
Kibanaã§ã¯ãæ°ããã³ã³ããã€ã³ããã¯ã¹ãèšå®ããå¿
èŠããããŸãããã®åŸãnginxã®å®è¡èšé²ã確èªã§ããŸãã
æçµçãªå®è£
ã®ãã¡ã€ã«ã¯
ããã«ãã
ãŸã ã
LogstashãããŒã«çªå
¥
誰ããç§ãã¡ã®ãœãªã¥ãŒã·ã§ã³ã«æºè¶³ããŠããŸããã圌ã®ä»äºã®ããã«ãå¥ã®èªå·±èšè¿°ã€ã³ããã¯ã¹ãä¿æããå¿
èŠããããããã§ãæ£ãããã³ãã¬ãŒãããããã³ã°ã§ããŒã«ããããšãå¿ããªãã§ãã ããã 人ã
ããã®ãããªè³ªåã«ç
©ããããªãããã«ãèšå€§ãªæ°ã®ãœãŒã¹ããæ
å ±ãåéããæ¹æ³ãç¥ã£ãŠããã ãã§ãªãããã°ãåäžã®åœ¢åŒã«ãããšããç¹ã§ãã¹ãŠã®æ±ãä»äºããããã°ã¢ã°ãªã²ãŒã¿ãŒããããŸãã å®éšã«ã¯logstashã䜿çšããŸãã
äŒçµ±çã«ãã³ã³ããã§logstashãå®è¡ããŸãã logstashã®å
¬åŒDockerã€ã¡ãŒãžã«ã¯ãœãŒã¹ãã¡ã€ã«ãå«ãŸããŠããŸããããããã¯ç§ã®æèŠã§ã¯å€å°å¥åŠã§ãïŒ
æ³šææ·±ãèªè
ãææããŠããããã«ã Dockerfileãžã®ãªã³ã¯ã¯ãŸã ååšããŠããŸã ïŒã ã¡ãªã¿ã«github-eã§èŠã€ãã£ã2çªç®ã«äººæ°ã®ããå¯äžã®
ã€ã¡ãŒãžã¯ãäœããã®çç±ã§ElasticSearchãšKibanaã®äž¡æ¹ãèµ·åããŸããããã¯ãã1ã€ã®ã³ã³ãããŒ-1ã€ã®ããã»ã¹ããšããæŠå¿µã«ççŸããŸãã ãã¡ãããéæ³ã®ãããªãã©ã°ã®çµã¿åãããäŒããæ©äŒããããŸãããæåã¯èè
ã®ãµã€ãããããã€ãã®ããŒãååŸããå¿
èŠããããŸããã DockerHubã«ã¯èŠç¥ãã¬äººã®ã³ã³ãããçŽ12åãã£ãã®ã§ãããŒãºã«åãããŠã³ã³ãããçµã¿ç«ãŠãæ¹ãè¯ãã§ãããã å¿
èŠãªã®ã¯ããã®Dockerfileã®ã¿ã§ãã
FROM dockerfile/java:oracle-java8 MAINTAINER aatarasoff@gmail.com RUN echo 'deb http://packages.elasticsearch.org/logstash/1.5/debian stable main' | sudo tee /etc/apt/sources.list.d/logstash.list && \ apt-get -y update && \ apt-get -y --force-yes install logstash EXPOSE 5959 VOLUME ["/opt/conf", "/opt/certs", "/opt/logs"] ENTRYPOINT exec /opt/logstash/bin/logstash agent -f /opt/conf/logstash.conf
ãã®ç»åã¯éåžžã«ã·ã³ãã«ã§ãå€éšèšå®ãã¡ã€ã«ãããå Žåã«ã®ã¿éå§ãããŸããããã¯ããšã³ã¿ãŒãã€ã³ã¡ã³ãã¿ã¹ã¯ã§ã¯éåžžã«æ®éã§ãã ç»åãåéããŠãDocker Hubã§åããŸãã
docker build -t aatarasoff/logstash . docker push aatarasoff/logstash
次ã®å
å®¹ã§æ§æãã¡ã€ã«/mnt/logstash/conf/logstash.confãäœæããŸãã
input { tcp { type => "audit" port => 5959 codec => json } } output { elasticsearch { embedded => false host => "10.211.55.8" port => "9200" protocol => "http" } }
type =>â auditâã¯ããã¹ãŠã®ãã°ãtypeãã£ãŒã«ãã«å
±éã®å€ãæã£ãŠããããšã確èªããŸããããã«ããããã®åŒå¥è
ãä»ã®ãã°ãšåºå¥ã§ããããã«ãªããŸãã æ®ãã®èšå®ã¯éåžžã«æçœã§ãã çŒãããŠã®ã³ã³ãããå®è¡ããŸãã
docker run -d -p 5959:5959 -v /mnt/logstash/conf:/opt/conf \ --name logstash aatarasoff/logstash
jcpãtcpçµç±ã§æž¡ããå Žåã«ãã°ãæžã蟌ãŸããããšã確èªããŸãã
å®è£
çªå·2
ãã§ã«2çªç®ã®ã¢ãžã¥ãŒã«ãå®è¡ããŠããã®ã§ãå®è£
ãå¥ã®ãããžã§ã¯ãã«å
¥ãã䟡å€ããããŸããããã
AuditorãšåŒã³ãŸãã ãŸããã¬ãžã¹ãã©ã®æ¢åã®ãèããä»äžããå¿
èŠããããŸãã ãããã£ãŠããã©ãŒã¯ãåããã³ãŒãããããžã§ã¯ãã«çŽ çŽã«ã³ããŒããŸãã
ã³ãã³ãmake devãå®è¡ããŠããã¹ãŠããŸã é²è¡ããŠããããšã確èªããŸãã
regitrator.goãã¡ã€ã«ã§ã¯ãããªããžã¢ãžã¥ãŒã«ãå€éšäŸåé¢ä¿ãšããŠæ¥ç¶ãããŠããããããã®ãã©ã«ããŒãå®å
šã«åé€ã§ããŸãã ç¹°ãè¿ããŸããããã¹ãŠãæ©èœããããšã確èªããŸãã
Dockerfile.devã倿ŽããŸãã
FROM gliderlabs/alpine:3.1 CMD ["/bin/auditor"] ENV GOPATH /go RUN apk-install go git mercurial COPY . /go/src/github.com/aatarasoff/auditor RUN cd /go/src/github.com/aatarasoff/auditor \ && go get -v && go build -ldflags "-X main.Version dev" -o /bin/auditor
åãæ¹æ³ã§ãªãªãŒã¹Dockefileã倿ŽããŸãã äžèŠãªã¿ã¹ã¯ãåé€ããMakefileã®ã³ã³ãããŒã®ååã倿ŽããŸãã
NAME=auditor VERSION=$(shell cat VERSION) dev: docker build -f Dockerfile.dev -t $(NAME):dev . docker run --rm --net host \ -v /var/run/docker.sock:/tmp/docker.sock \ $(NAME):dev /bin/auditor elastic: build: mkdir -p build docker build -t $(NAME):$(VERSION) . docker save $(NAME):$(VERSION) | gzip -9 > build/$(NAME)_$(VERSION).tgz
æ°ããã¢ãžã¥ãŒã«/ logstashãšlogstash.goãã¡ã€ã«ããããžã§ã¯ãã«è¿œå ããŸãã logstashã®æ¢è£œã®ã¯ã©ã€ã¢ã³ãã䜿çšããŸããããã¯ã³ã«ã¯ã®ããã«æãã§ãå®éã«ã¯æšæºã®ãããã©ã€ãã©ãª
github.com/heatxsink/go-logstashã®åãªãã©ãããŒ
ã§ã ã
ä»åã¯ãã³ã³ããæ§é ã以åã®ããŒãžã§ã³ãšå°ãç°ãªããŸãã
type Container struct { Name string `json:"container_name"` Action string `json:"action"` Service *bridge.Service `json:"info"` }
ããã¯ãjsonã§ãªããžã§ã¯ããã·ãªã¢ã«åããlogstashã§æååãšããŠéä¿¡ããã ãã§ãã¡ãã»ãŒãžèªäœã®ãã¹ãŠã®ãã£ãŒã«ããåŠçããå¿
èŠãããããã§ãã
åååæ§ãå·¥å Žãç»é²ããŸãã
func init() { bridge.Register(new(Factory), "logstash") }
ãããŠãæ°ããã¢ããã¿ãŒã€ã³ã¹ã¿ã³ã¹ãäœæããŸãã
func (f *Factory) New(uri *url.URL) bridge.RegistryAdapter { urls := "127.0.0.1:5959" if uri.Host != "" { urls = uri.Host } host, port, err := net.SplitHostPort(urls) if err != nil { log.Fatal("logstash: ", "split error") } intPort, _ := strconv.Atoi(port) client := logstashapi.New(host, intPort, 5000) return &LogstashAdapter{client: client} } type LogstashAdapter struct { client *logstashapi.Logstash }
ããã§ã¯ããã¹ããšããŒããæååããåé¢ã§ãããŠãŒãã£ãªãã£ã¡ãœããnet.SplitHostPortïŒurlsïŒã䜿çšããå¿
èŠããããŸãããããã¯ãã¯ã©ã€ã¢ã³ããããããåå¥ã«åä¿¡ããuri.Hostã«ãŸãšããããããã§ãã
ããŒãã®æ°å€è¡šçŸã¯ãæååãæ°å€ã«å€æããæ¹æ³intPortã_ïŒ= strconv.AtoiïŒportïŒãé©çšããããšã«ããååŸã§ããŸãã ãã®é¢æ°ã¯2ã€ã®ãã©ã¡ãŒã¿ãŒãè¿ããããã¢ã³ããŒã¹ã³ã¢ãå¿
èŠã§ãã2çªç®ã®ãã©ã¡ãŒã¿ãŒã¯åŠçã§ããªããšã©ãŒã§ãã
Pingã¡ãœããã®å®è£
ã¯éåžžã«ç°¡åã§ããããšãããããŸããã
func (r *LogstashAdapter) Ping() error { _, err := r.client.Connect() if err != nil { return err } return nil }
å®éãtcpãä»ããŠlogstashã«æ¥ç¶ã§ããããšã確èªããŸãã æ¥ç¶æ©èœã§ã¯ãçŸåšã®æ¥ç¶ã䜿çšã§ããªããªã£ãå Žåã«ã®ã¿åæ¥ç¶ãçºçããŸãã
ç»é²æ¹æ³ãå®è£
ããããã«æ®ããŸãïŒ
func (r *LogstashAdapter) Register(service *bridge.Service) error { container := Container{Name: service.Name, Action: "start", Service: service} asJson, err := json.Marshal(container) if err != nil { return err } _, err = r.client.Connect() if err != nil { return err } err = r.client.Writeln(string(asJson)) if err != nil { return err } return nil }
ã³ãŒãã¯ååã«æç¢ºã§ãããã³ã¡ã³ããå¿
èŠãšããªããã®ã¯1ã€ãé€ããŸãã Writelnã®åã«ConnectãåŒã³åºããšãåäœäžã®æ¥ç¶ãåä¿¡ãããŸãã
Deregisterã¡ãœããã¯ãäžèšã®ã¡ãœããã®å®å
šãªã³ããŒã§ãã
ãšã©ã¹ãã£ãã¯ããŒã³ãã©ã€ã³ã®Dockerfile.devã倿ŽããŠãlogstashãéå§ããElasticSearchã®ãšã³ããªã確èªããŸãã
curl 'http://localhost:9200/_search?pretty'
...èªåã®å¹žããä»ã®äººãšå
±æãã
GitHubã§å€æŽãã³ãããããDockerHubã®ã€ã¡ãŒãžãåéããŸãã
hub.docker.comã§ ãããŒãžã«ç§»åããŠ[+ãªããžããªã远å ]ãã¿ã³ãã¯ãªãã¯ããŸãã logstash-aã®ã€ã¡ãŒãžãåéããããšãã«ããªããžããªãµãã¢ã€ãã ãéžæããŸãããããã«ãããã€ã¡ãŒãžãæåã§å
¥åã§ããŸãããå¥ã®æ¹æ³-èªåãã«ãããããŸãã ã¯ãªãã¯ãããšãDocker Hubã¯ã¢ã«ãŠã³ããGitHubãŸãã¯BitBucketã«æ¥ç¶ããããšãææ¡ããŸãã ãã®åŸãå¿
èŠãªå Žåã¯ããªããžããªãç®çã®ãã©ã³ããéžæããã€ã¡ãŒãžã®ååã倿Žããã ãã§ãã README.MDããã®èª¬æã®è»¢éãå«ããã®ä»ã®ãã¹ãŠã¯ãDocker Hubã«åŒãç¶ãããŸãã
å°ãåŸ
ã£ãŠãããããã§åœŒã¯-宿ãã
ç»åã§ãã
ããã§ãç°¡åãªã³ãã³ããå®è¡ããŠãã¹ãã§ããŸãã
docker run -d --net=host \ -v /var/run/docker.sock:/tmp/docker.sock \ --name auditor aatarasoff/auditor logstash://
PSã ãããžã§ã¯ãã¯æ¬çªç°å¢ã§ã¯äœ¿çšããããç§ã®éèŠãªèгç¹ããã¯çµäºããå¿
èŠããããŸãããèšäºãèªãã 人ã¯èª°ã§ãããã詊ããŠãå¿
èŠã«å¿ããŠæ¹åã§ããŸãã