Skip to content

Commit

Permalink
feat: simple starting point to hack on
Browse files Browse the repository at this point in the history
  • Loading branch information
Joey Freeland committed Dec 22, 2020
0 parents commit b70122a
Show file tree
Hide file tree
Showing 14 changed files with 254 additions and 0 deletions.
31 changes: 31 additions & 0 deletions .github/workflows/build-and-push.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
name: Build and push
on:
push:
branches:
- "main"

jobs:
build-and-push:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2.3.4
- name: Configure AWS credentials
uses: aws-actions/configure-aws-credentials@v1
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: us-west-2
- name: Login to Amazon ECR
id: login-ecr
uses: aws-actions/amazon-ecr-login@v1
- name: Build, tag, and push image to Amazon ECR
env:
#ECR_REGISTRY: ${{ steps.login-ecr.outputs.registry }}
ECR_REGISTRY: public.ecr.aws
ECR_REPOSITORY: z1r6e3l2/jfreeland/ec2-network-monitor
IMAGE_TAG: ${{ github.sha }}
run: |
docker build -t $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG .
docker tag $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG $ECR_REGISTRY/$ECR_REPOSITORY:latest
docker push $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG
docker push $ECR_REGISTRY/$ECR_REPOSITORY:latest
4 changes: 4 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
/bin
/.go
/.container-*
/.dockerfile-*
16 changes: 16 additions & 0 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
FROM golang:1.15-alpine AS builder

WORKDIR $GOPATH/src/github.com/jfreeland/ec2-network-monitor

# Download module dependencies to take advantage of Docker layer caching
COPY go.mod go.sum ./
RUN go mod download

COPY . .

RUN mkdir output && \
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o output/ ./...

FROM golang:1.15-alpine
COPY --from=builder /go/src/github.com/jfreeland/ec2-network-monitor/output/ec2nm /usr/local/bin
CMD ["ec2nm"]
6 changes: 6 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
# ec2-network-monitor

This is a simple example of monitoring ec2 network metrics that are not being
presented via ethtool.

For more information see [Monitoring EC2 Network Performance ENA](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/monitoring-network-performance-ena.html).
45 changes: 45 additions & 0 deletions cmd/ec2nm/main.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
package main

import (
"flag"
"fmt"
"log"
"time"

"github.com/DataDog/datadog-go/statsd"
"github.com/safchain/ethtool"
)

func main() {
statsHost := flag.String("host", "", "the datadog agent host and port")
flag.Parse()

statsd, err := statsd.New(*statsHost, statsd.WithNamespace("aws.ec2."))
if err != nil {
log.Fatalf("err: %v\n", err)
}

for {
ethHandle, err := ethtool.NewEthtool()
if err != nil {
log.Fatalf("err: %v\n", err)
}
defer ethHandle.Close()

stats, err := ethHandle.Stats("eth0")
if err != nil {
log.Fatalf("err: %v\n", err)
}

track := []string{"bw_in_allowance_exceeded", "bw_out_allowance_exceeded", "pps_allowance_exceeded", "conntrack_allowance_exceeded", "linklocal_allowance_exceeded"}

for _, stat := range track {
fmt.Printf("%v: %v\n", stat, stats[stat])
err = statsd.Count(stat, int64(stats[stat]), nil, 1)
if err != nil {
log.Printf("err posting gauge %v: %v\n", stat, err)
}
}
time.Sleep(10 * time.Second)
}
}
Binary file added ec2-network-monitor-0.1.0.tgz
Binary file not shown.
10 changes: 10 additions & 0 deletions go.mod
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
module github.com/thockin/go-build-template

go 1.15

require (
github.com/DataDog/datadog-go v4.2.0+incompatible
github.com/safchain/ethtool v0.0.0-20201023143004-874930cb3ce0
github.com/stretchr/testify v1.6.1 // indirect
golang.org/x/sys v0.0.0-20201221093633-bc327ba9c2f0 // indirect
)
18 changes: 18 additions & 0 deletions go.sum
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
github.com/DataDog/datadog-go v4.2.0+incompatible h1:Q73jzyKHwyA04Gf4SSukRF+KR4wJEimU6tAuU0B8Y4Y=
github.com/DataDog/datadog-go v4.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ=
github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/safchain/ethtool v0.0.0-20201023143004-874930cb3ce0 h1:eskphjc5kRCykOJyX7HHVbJCs25/8knprttvrVvEd8o=
github.com/safchain/ethtool v0.0.0-20201023143004-874930cb3ce0/go.mod h1:Z0q5wiBQGYcxhMZ6gUqHn6pYNLypFAvaL3UvgZLR0U4=
github.com/stretchr/objx v0.1.0 h1:4G4v2dO3VZwixGIRoQ5Lfboy6nUhCyYzaqnIAPPhYs4=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/testify v1.6.1 h1:hDPOHmpOpP40lSULcqw7IrRb/u7w6RpDC9399XyoNd0=
github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
golang.org/x/sys v0.0.0-20201221093633-bc327ba9c2f0 h1:n+DPcgTwkgWzIFpLmoimYR2K2b0Ga5+Os4kayIN0vGo=
golang.org/x/sys v0.0.0-20201221093633-bc327ba9c2f0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
6 changes: 6 additions & 0 deletions helm/Chart.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
apiVersion: v2
name: ec2-network-monitor
description: EC2 Network Performance Monitoring Stats Scraper
type: application
version: 0.1.0
appVersion: 0.1.0
63 changes: 63 additions & 0 deletions helm/templates/_helpers.tpl
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
{{/* vim: set filetype=mustache: */}}
{{/*
Expand the name of the chart.
*/}}
{{- define "ec2-network-monitor.name" -}}
{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}}
{{- end -}}

{{/*
Create a default fully qualified app name.
We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec).
If release name contains chart name it will be used as a full name.
*/}}
{{- define "ec2-network-monitor.fullname" -}}
{{- if .Values.fullnameOverride -}}
{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}}
{{- else -}}
{{- $name := default .Chart.Name .Values.nameOverride -}}
{{- if contains $name .Release.Name -}}
{{- .Release.Name | trunc 63 | trimSuffix "-" -}}
{{- else -}}
{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}}
{{- end -}}
{{- end -}}
{{- end -}}

{{/*
Create chart name and version as used by the chart label.
*/}}
{{- define "ec2-network-monitor.chart" -}}
{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}}
{{- end -}}

{{/*
Common labels
*/}}
{{- define "ec2-network-monitor.labels" -}}
helm.sh/chart: {{ include "ec2-network-monitor.chart" . }}
{{ include "ec2-network-monitor.selectorLabels" . }}
{{- if .Chart.AppVersion }}
app.kubernetes.io/version: {{ .Chart.AppVersion | quote }}
{{- end }}
app.kubernetes.io/managed-by: {{ .Release.Service }}
{{- end -}}

{{/*
Selector labels
*/}}
{{- define "ec2-network-monitor.selectorLabels" -}}
app.kubernetes.io/name: {{ include "ec2-network-monitor.name" . }}
app.kubernetes.io/instance: {{ .Release.Name }}
{{- end -}}

{{/*
Create the name of the service account to use
*/}}
{{- define "ec2-network-monitor.serviceAccountName" -}}
{{- if .Values.serviceAccount.create -}}
{{ default (include "ec2-network-monitor.fullname" .) .Values.serviceAccount.name }}
{{- else -}}
{{ default "default" .Values.serviceAccount.name }}
{{- end -}}
{{- end -}}
40 changes: 40 additions & 0 deletions helm/templates/daemonset.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: {{ include "ec2-network-monitor.fullname" . }}
labels:
{{- include "ec2-network-monitor.labels" . | nindent 4 }}
spec:
replicas: 1
selector:
matchLabels:
{{- include "ec2-network-monitor.selectorLabels" . | nindent 6 }}
template:
metadata:
labels:
{{- include "ec2-network-monitor.selectorLabels" . | nindent 8 }}
spec:
containers:
- name: ec2-network-monitor
image: "public.ecr.aws/z1r6e3l2/jfreeland/ec2-network-monitor/ec2nm:latest"
env:
- name: DD_AGENT_HOST
valueFrom:
fieldRef:
fieldPath: status.hostIP
- name: DD_ENTITY_ID
valueFrom:
fieldRef:
fieldPath: metadata.uid
command:
- "/usr/local/bin/ec2nm"
args:
- "-host"
- $(DD_AGENT_HOST):8125
imagePullPolicy: IfNotPresent
resources:
limits:
memory: 50Mi
requests:
cpu: 50M
memory: 50Mi
Empty file added helm/values.yaml
Empty file.
14 changes: 14 additions & 0 deletions index.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
apiVersion: v1
entries:
ec2-network-monitor:
- apiVersion: v2
appVersion: 0.1.0
created: "2020-12-21T16:04:53.283473-08:00"
description: EC2 Network Performance Monitoring Stats Scraper
digest: 7588f3551d39b6909bd9c6d4d2cb7a13e06b18e4ba7462af56b0323842f13a0f
name: ec2-network-monitor
type: application
urls:
- https://jfreeland.github.io/ec2-network-monitor/ec2-network-monitor-0.1.0.tgz
version: 0.1.0
generated: "2020-12-21T16:04:53.275455-08:00"
1 change: 1 addition & 0 deletions robots.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
User-Agent: *nDisallow: /”

0 comments on commit b70122a

Please sign in to comment.