Skip to content

Commit

Permalink
Broken logging (#115)
Browse files Browse the repository at this point in the history
* add logging

* resolve timestamp pb to avoid marshall & unmarshall warnings

* gofmt

It closes #114
  • Loading branch information
marminthibaut authored Aug 5, 2016
1 parent 3702775 commit eba8d78
Show file tree
Hide file tree
Showing 4 changed files with 84 additions and 62 deletions.
35 changes: 26 additions & 9 deletions beater/dockerbeat.go
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,7 @@ func (bt *Dockerbeat) Config(b *beat.Beat) error {

err := cfgfile.Read(&bt.beatConfig, "")
if err != nil {
logp.Err("Error reading configuration file: %v", err)
logp.Err("dockerbeat", "Error reading configuration file: %v", err)
return err
}

Expand Down Expand Up @@ -143,7 +143,7 @@ func (bt *Dockerbeat) Config(b *beat.Beat) error {
}

logp.Info("dockerbeat", "Init dockerbeat")
logp.Info("dockerbeat", "Follow docker socket %q\n", bt.socketConfig.socket)
logp.Info("dockerbeat", "Follow docker socket %v\n", bt.socketConfig.socket)
if bt.socketConfig.enableTls {
logp.Info("dockerbeat", "TLS enabled\n")
} else {
Expand Down Expand Up @@ -193,7 +193,7 @@ func (bt *Dockerbeat) Setup(b *beat.Beat) error {
}

func (bt *Dockerbeat) Run(b *beat.Beat) error {
logp.Info("dockerbeat is running! Hit CTRL-C to stop it.")
logp.Info("dockerbeat", "dockerbeat is running! Hit CTRL-C to stop it.")
var err error

ticker := time.NewTicker(bt.period)
Expand All @@ -209,7 +209,7 @@ func (bt *Dockerbeat) Run(b *beat.Beat) error {
// check prerequisites
err = bt.checkPrerequisites()
if err != nil {
logp.Err("Unable to collect metrics: %v", err)
logp.Err("dockerbeat", "Unable to collect metrics: %v", err)
bt.publishLogEvent(ERROR, fmt.Sprintf("Unable to collect metrics: %v", err))
continue
}
Expand All @@ -220,7 +220,7 @@ func (bt *Dockerbeat) Run(b *beat.Beat) error {

duration := timerEnd.Sub(timerStart)
if duration.Nanoseconds() > bt.period.Nanoseconds() {
logp.Warn("Ignoring tick(s) due to processing taking longer than one period")
logp.Warn("dockerbeat", "Ignoring tick(s) due to processing taking longer than one period")
bt.publishLogEvent(WARN, "Ignoring tick(s) due to processing taking longer than one period")
}
}
Expand All @@ -232,19 +232,21 @@ func (d *Dockerbeat) Cleanup(b *beat.Beat) error {

func (d *Dockerbeat) Stop() {
close(d.done)
logp.Info("Stopping dockerbeat")
logp.Info("dockerbeat", "Stopping dockerbeat")
}

func (d *Dockerbeat) RunOneTime(b *beat.Beat) error {
logp.Debug("dockerbeat", "Tick!, getting list of containers")
containers, err := d.dockerClient.ListContainers(docker.ListContainersOptions{})

if err == nil {
logp.Debug("dockerbeat", "got %v containers", len(containers))
//export stats for each container
for _, container := range containers {
d.exportContainerStats(container)
}
} else {
logp.Err("Cannot get container list: %v", err)
logp.Err("dockerbeat", "Cannot get container list: %v", err)
d.publishLogEvent(ERROR, fmt.Sprintf("Cannot get container list: %v", err))
}

Expand Down Expand Up @@ -282,31 +284,46 @@ func (d *Dockerbeat) exportContainerStats(container docker.APIContainers) error
// export events if it is enabled in the configuration

if d.statsConfig.Container {
logp.Debug("dockerbeat", "generating container event for %v", container.ID)
events = append(events, d.eventGenerator.GetContainerEvent(&container, stats))
logp.Debug("dockerbeat", "container event append to event list (container %v)", container.ID)
}

if d.statsConfig.Cpu {
logp.Debug("dockerbeat", "generating cpu event for %v", container.ID)
events = append(events, d.eventGenerator.GetCpuEvent(&container, stats))
logp.Debug("dockerbeat", "container cpu append to event list (container %v)", container.ID)

}

if d.statsConfig.Memory {
logp.Debug("dockerbeat", "generating memory event for %v", container.ID)
events = append(events, d.eventGenerator.GetMemoryEvent(&container, stats))
logp.Debug("dockerbeat", "container memory append to event list (container %v)", container.ID)

}

if d.statsConfig.Blkio {
logp.Debug("dockerbeat", "generating blkio event for %v", container.ID)
events = append(events, d.eventGenerator.GetBlkioEvent(&container, stats))
logp.Debug("dockerbeat", "container blkio append to event list (container %v)", container.ID)

}

if d.statsConfig.Net {
logp.Debug("dockerbeat", "generating net event for %v", container.ID)
events = append(events, d.eventGenerator.GetNetworksEvent(&container, stats)...)
logp.Debug("dockerbeat", "container net append to event list (container %v)", container.ID)

}

logp.Info("dockerbeat", "Publishing %v events", len(events))
d.events.PublishEvents(events)
} else if err == nil && stats == nil {
logp.Warn("Container was existing at listing but not when getting statistics: %v", container.ID)
logp.Warn("dockerbeat", "Container was existing at listing but not when getting statistics: %v", container.ID)
d.publishLogEvent(WARN, fmt.Sprintf("Container was existing at listing but not when getting statistics: %v", container.ID))
} else {
logp.Err("An error occurred while getting docker stats: %v", err)
logp.Err("dockerbeat", "An error occurred while getting docker stats: %v", err)
d.publishLogEvent(ERROR, fmt.Sprintf("An error occurred while getting docker stats: %v", err))
}
}()
Expand Down
8 changes: 4 additions & 4 deletions config/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,8 @@ type StatsConfig struct {
}

type DockerbeatConfig struct {
Period *int64
Socket *string
Tls TlsConfig
Stats StatsConfig
Period *int64 `config:"period"`
Socket *string `config:"socket"`
Tls TlsConfig `config:"tls"`
Stats StatsConfig `config:"stats"`
}
15 changes: 10 additions & 5 deletions event/generator.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package event

import (
"github.com/elastic/beats/libbeat/common"
"github.com/elastic/beats/libbeat/logp"
"github.com/fsouza/go-dockerclient"
"github.com/ingensi/dockerbeat/calculator"
"strings"
Expand Down Expand Up @@ -33,6 +34,7 @@ type EventGenerator struct {
}

func (d *EventGenerator) GetContainerEvent(container *docker.APIContainers, stats *docker.Stats) common.MapStr {
logp.Debug("generator", "Generate container event %v", container.ID)
event := common.MapStr{
"@timestamp": common.Time(stats.Read),
"type": "container",
Expand All @@ -43,7 +45,7 @@ func (d *EventGenerator) GetContainerEvent(container *docker.APIContainers, stat
"container": common.MapStr{
"id": container.ID,
"command": container.Command,
"created": time.Unix(container.Created, 0),
"created": common.Time(time.Unix(container.Created, 0)),
"image": container.Image,
"names": container.Names,
"ports": d.convertContainerPorts(&container.Ports),
Expand All @@ -56,7 +58,7 @@ func (d *EventGenerator) GetContainerEvent(container *docker.APIContainers, stat
}

func (d *EventGenerator) GetCpuEvent(container *docker.APIContainers, stats *docker.Stats) common.MapStr {

logp.Debug("generator", "Generate cpu event %v", container.ID)
calculator := d.CalculatorFactory.NewCPUCalculator(
calculator.CPUData{
PerCpuUsage: stats.PreCPUStats.CPUUsage.PercpuUsage,
Expand Down Expand Up @@ -91,6 +93,7 @@ func (d *EventGenerator) GetCpuEvent(container *docker.APIContainers, stats *doc
}

func (d *EventGenerator) GetNetworksEvent(container *docker.APIContainers, stats *docker.Stats) []common.MapStr {
logp.Debug("generator", "Generate network events %v", container.ID)
events := []common.MapStr{}

for netName, netStats := range stats.Networks {
Expand Down Expand Up @@ -121,7 +124,7 @@ func (d *EventGenerator) GetNetworksEvent(container *docker.APIContainers, stats
}

func (d *EventGenerator) GetNetworkEvent(container *docker.APIContainers, time time.Time, network string, networkStats *docker.NetworkStats) common.MapStr {

logp.Debug("generator", "Generate network event %v", container.ID)
newNetworkData := calculator.NetworkData{
Time: time,
RxBytes: networkStats.RxBytes,
Expand Down Expand Up @@ -194,6 +197,7 @@ func (d *EventGenerator) GetNetworkEvent(container *docker.APIContainers, time t
}

func (d *EventGenerator) GetMemoryEvent(container *docker.APIContainers, stats *docker.Stats) common.MapStr {
logp.Debug("generator", "Generate memory event %v", container.ID)
event := common.MapStr{
"@timestamp": common.Time(stats.Read),
"type": "memory",
Expand All @@ -216,6 +220,7 @@ func (d *EventGenerator) GetMemoryEvent(container *docker.APIContainers, stats *
}

func (d *EventGenerator) GetBlkioEvent(container *docker.APIContainers, stats *docker.Stats) common.MapStr {
logp.Debug("generator", "Generate blkio event %v", container.ID)
blkioStats := d.buildStats(stats.Read, stats.BlkioStats.IOServicedRecursive)

var event common.MapStr
Expand Down Expand Up @@ -270,7 +275,7 @@ func (d *EventGenerator) GetBlkioEvent(container *docker.APIContainers, stats *d
}

func (d *EventGenerator) GetLogEvent(level string, message string) common.MapStr {

logp.Debug("generator", "Generate log event with message: %v", message)
event := common.MapStr{
"@timestamp": common.Time(time.Now()),
"type": "log",
Expand Down Expand Up @@ -301,7 +306,7 @@ func (d *EventGenerator) convertContainerPorts(ports *[]docker.APIPort) []map[st
func (d *EventGenerator) CleanOldStats(containers []docker.APIContainers) {
found := false
d.NetworkStats.Lock()
for containerStatKey, _ := range d.NetworkStats.M {
for containerStatKey := range d.NetworkStats.M {
for _, container := range containers {
if container.ID == containerStatKey {
found = true
Expand Down
Loading

0 comments on commit eba8d78

Please sign in to comment.