How to push messages into MongoDB using Benthos
Setting up a Benthos deployment is a quick way to get data into MongoDB. Just follow the steps provided and easily push data into MongoDB.
Instructions
- Open UMHLens and create a Create resource by clicking on the + icon at the bottom.
2. Paste in the YAML file (below)
3. Adjust the topic to where benthos should listen to
4. Adjust the database and collection, to where you want to save the messages
5. Copy the password located in UMHLens under Config -> Secrets -> mongodb and replace CHANGE_ME with it.
6. Additionally you can modify the pipeline. For now it only takes the incoming message and adds a timestamp to it.
7. When you are done click create to get a benthos-deployment.
8. If you want to make a new deployment make sure, to delete the previous deployment and config-map.
9. The deployment is located under Workloads -> Deployments
10. The config-map is located under Config -> ConfigMaps
Message format
- For consitency reasons use the following message structure:
{
“orderID”: “<orderID>”,
“parents”: [“<parent-order-id-1>”, …],
“enterprise”: <enterprise>,
“site”:....
“area”..
“line”..
“workCell”..
“timestamp_begin” (only necessary for processValue)
“timestamp_end” (only necessary for processValue)
“data”: {
<whatever>
}
}
Benthos YAML
apiVersion: v1
kind: ConfigMap
metadata:
name: benthos-1-config
namespace: united-manufacturing-hub
labels:
app: benthos-1
data:
benthos.yaml: |-
input:
kafka:
addresses:
- united-manufacturing-hub-kafka:9092
topics:
- ia.raw.<asset>.mongodb.productTagv2Alpha
consumer_group: "benthos-mongodb"
pipeline:
processors:
- bloblang: |
root = {
"message": this,
"timestamp_unix": timestamp_unix()
}
output:
mongodb:
url: mongodb://mongodb:27017
database: Test
username: root
password: CHANGE_ME
operation: insert-one
collection: Test
write_concern:
w: majority
j: true
w_timeout: ""
document_map: |-
root.message = this.message
root.timestamp_unix = this.timestamp_unix
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: benthos-1-deployment
namespace: united-manufacturing-hub
labels:
app: benthos-1
spec:
replicas: 1
selector:
matchLabels:
app: benthos-1
template:
metadata:
labels:
app: benthos-1
spec:
containers:
- name: benthos-1
image: "ghcr.io/united-manufacturing-hub/benthos-umh:latest"
imagePullPolicy: IfNotPresent
ports:
- name: http
containerPort: 4195
protocol: TCP
livenessProbe:
httpGet:
path: /ping
port: http
readinessProbe:
initialDelaySeconds: 30
httpGet:
path: /ready
port: http
volumeMounts:
- name: config
mountPath: "/benthos.yaml"
subPath: "benthos.yaml"
readOnly: true
volumes:
- name: config
configMap:
name: benthos-1-config