Skip to content

Commit 4157141

Browse files
authored
Add EKS example (#41)
Closes #40 fix integ test script caused by change in agent logging npm audit fix add debug logging to agent sink revert agent version
1 parent 730bbae commit 4157141

File tree

12 files changed

+484
-3
lines changed

12 files changed

+484
-3
lines changed

bin/run-integ-tests.sh

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ $rootdir/bin/start-agent.sh
2525
###################################
2626

2727
echo "Waiting for agent to start."
28-
tail -f $tempfile | sed '/Output \[cloudwatchlogs\] buffer/ q'
28+
tail -f $tempfile | sed '/Loaded outputs: cloudwatchlogs/ q'
2929
containerId=$(docker ps -q)
3030
echo "Agent started in container: $containerId."
3131

@@ -41,6 +41,7 @@ status_code=$?
4141
# Cleanup
4242
###################################
4343

44+
cat $tempfile
4445
docker stop $containerId
4546
rm -rf $tempfile
4647
rm -rf ./.aws/credentials

examples/eks/Dockerfile

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
FROM node:10.16.0-alpine AS base
2+
RUN mkdir -p /app/src
3+
WORKDIR /app/src
4+
5+
COPY package.json ./
6+
# install packages but copy the local version of the package in directly
7+
RUN npm i && rm -rf node_modules/aws-embedded-metrics
8+
COPY node_modules/aws-embedded-metrics ./node_modules/aws-embedded-metrics
9+
10+
# copy the source files over
11+
COPY . .
12+
13+
CMD [ "node", "app" ]

examples/eks/README.md

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
# Running Locally
2+
3+
```
4+
npm i && npm run serve-local
5+
```
6+
7+
# Deploying
8+
9+
1. Build and push the docker image. You will want to use your own Dockerhub repository.
10+
```
11+
docker login
12+
docker build . -t jaredcnance/eks-demo:latest
13+
docker push jaredcnance/eks-demo
14+
```
15+
16+
2. Apply the configuration to your cluster.
17+
```
18+
kubectl apply -f kubernetes/deployment.yaml
19+
kubectl apply -f kubernetes/service.yaml
20+
kubectl get deployment eks-demo
21+
```
22+
23+
3. To test, naviagate to your ELB endpoint for the cluster:
24+
25+
```
26+
curl http://<endpoint>.<region>.elb.amazonaws.com/ping
27+
```
28+
29+
4. To update, re-build, push changes and delete the running pod.
30+
31+
```
32+
docker build . -t jaredcnance/eks-demo:latest
33+
docker push jaredcnance/eks-demo
34+
kubectl delete pod ...
35+
```

examples/eks/app.js

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
const Koa = require('koa');
2+
const app = new Koa();
3+
4+
const { metricScope, Configuration, Unit } = require('aws-embedded-metrics');
5+
6+
Configuration.serviceName = 'EKS-Demo';
7+
Configuration.serviceType = 'AWS::EKS::Cluster';
8+
Configuration.logStreamName = process.env.HOSTNAME;
9+
10+
app.use(
11+
metricScope(metrics => async (ctx, next) => {
12+
const start = Date.now();
13+
14+
await next();
15+
16+
ctx.body = `Hello World ... ${ctx.method} ${ctx.url}\n`;
17+
18+
metrics.setProperty('Method', ctx.method);
19+
metrics.setProperty('Url', ctx.url);
20+
metrics.putMetric('ProcessingTime', Date.now() - start, Unit.Milliseconds);
21+
}),
22+
);
23+
24+
app.listen(3000);

examples/eks/cwagent-configmap.yaml

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
apiVersion: v1
2+
data:
3+
# Any changes here must not break the JSON format
4+
cwagentconfig.json: |
5+
{
6+
"agent": {
7+
"omit_hostname": true
8+
},
9+
"logs": {
10+
"metrics_collected": {
11+
"emf": { }
12+
}
13+
}
14+
}
15+
kind: ConfigMap
16+
metadata:
17+
name: cw-agent-config
18+
namespace: default
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
apiVersion: apps/v1
2+
kind: Deployment
3+
metadata:
4+
name: eks-demo
5+
labels:
6+
app: eks-demo
7+
namespace: default
8+
spec:
9+
replicas: 1
10+
selector:
11+
matchLabels:
12+
app: eks-demo
13+
strategy:
14+
rollingUpdate:
15+
maxSurge: 25%
16+
maxUnavailable: 25%
17+
type: RollingUpdate
18+
template:
19+
metadata:
20+
labels:
21+
app: eks-demo
22+
spec:
23+
containers:
24+
- image: jaredcnance/eks-demo:latest
25+
imagePullPolicy: Always
26+
name: eks-demo
27+
ports:
28+
- containerPort: 3000
29+
protocol: TCP
30+
env:
31+
- name: AWS_EMF_AGENT_ENDPOINT
32+
value: "tcp://127.0.0.1:25888"
33+
- name: AWS_EMF_ENABLE_DEBUG_LOGGING
34+
value: "true"
35+
- image: amazon/cloudwatch-agent:latest
36+
name: cloudwatch-agent
37+
imagePullPolicy: Always
38+
resources:
39+
limits:
40+
cpu: 200m
41+
memory: 100Mi
42+
requests:
43+
cpu: 200m
44+
memory: 100Mi
45+
volumeMounts:
46+
- name: cwagentconfig
47+
mountPath: /etc/cwagentconfig
48+
ports:
49+
- protocol: TCP
50+
hostPort: 25888
51+
containerPort: 25888
52+
volumes:
53+
- name: cwagentconfig
54+
configMap:
55+
name: cw-agent-config
56+

examples/eks/kubernetes/service.yaml

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
2+
apiVersion: v1
3+
kind: Service
4+
metadata:
5+
name: eks-demo
6+
spec:
7+
selector:
8+
app: eks-demo
9+
type: LoadBalancer
10+
ports:
11+
- protocol: TCP
12+
port: 80
13+
targetPort: 3000

0 commit comments

Comments
 (0)