Since there’s no way to send GNU zip files through filebeat, this service will be responsible for checking if there are new .gz files based on a path that we’ll explode using globbing, decompress them, send them using the filebeat service with the provided configuration and store them in a local file registry.
It can also be used for non-compressed files.
🔔 Go Version 1.18 or higher
- Move to the cloned repository and install with:
$ go install
$ beatshipper -h
Sends data based on paths that will be exploded using GLOB
with the possibility of passing GNU Zip files also.
Usage:
beatshipper [command]
Available Commands:
completion Generate the autocompletion script for the specified shell
help Help about any command
send Send the message as a beat
Flags:
-h, --help help for beatshipper
-v, --version version for beatshipper
Use "beatshipper [command] --help" for more information about a command.
$ beatshipper --version
beatshipper version 0.0.1
We should create the configuration in any of the following both locations:
/etc/beatshipper/beatshipper-conf.yml
$HOME/.config/beatshipper-conf.yml
An example is located in the root of the project. We should add the following fields:
host
port
path
array of paths that will be exploded usingGLOB
registry
: the name of the file where we'll store the processed files.recheck
time of recheck (re-process) if there are new pending files to sendlogsource
very useful in logstash to handle conditions based on the name of the source
We have created two SystemD files:
service
file: it specifies the binary that will execute the servicetimer
file: we are gonna execute the service as timer.
By default the timer will launch the service in one shoot type every 30 minutes (*:0/30
). If we wanna change the time we should change the OnCalendar
directime in the timer
file.
These files are being coppied to the following directory /lib/systemd/system/
if we install the generated RPM package.
We can enable and start the timer
with the following commands:
$ systemctl enable beatshipper.timer
$ systemctl start beatshipper.timer
We can check if the timer has been activated:
$ systemctl list-timers | grep beatshipper -B1
NEXT LEFT LAST PASSED UNIT ACTIVATES
Mon 2022-12-26 16:00:00 CET 27min left Mon 2022-12-26 15:30:32 CET 2min 12s ago beatshipper.timer beatshipper.service
$ journalctl -u beatshipper.timer
dic 26 15:30:32 user systemd[1]: Started Beatshipper execution schedule.
If we have the right configuration, we can start the program using the following command - It will read the configuration, start checking if there are pending packages that aren't in the registry and send them to the server that is listening using beats
- e.g. a logstash instance with the beats
module -:
$ beatshipper send
2022/11/18 21:04:53 shipper.go:77: Conexion successful with: localhost:5044
2022/11/18 21:04:53 shipper.go:82: Processing: /jenkinst-test
jenkinst-test/jenkins-logs/rcj/test/sub-test/sub-sub-test/var/log/extra/rpm-list.txt.gz
2022/11/18 21:04:53 shipper.go:82: Processing: /jenkinst-test
jenkinst-test/jenkins-logs/rcj/test/sub-test/sub-sub-test10/var/log/extra/rpm-list.txt.gz
2022/11/18 21:04:53 shipper.go:118: Chunk slice into: 5 slices
2022/11/18 21:04:53 shipper.go:96: Sending batch of data...
2022/11/18 21:04:53 shipper.go:96: Sending batch of data...
2022/11/18 21:04:53 shipper.go:96: Sending batch of data...
2022/11/18 21:04:53 shipper.go:101: Conexion closed
2022/11/18 21:04:53 registry.go:75: Added to registry: /jenkinst-test
jenkinst-test/jenkins-logs/rcj/test/sub-test/sub-sub-test/var/log/extra/rpm-list.txt.gz
2022/11/18 21:04:53 registry.go:75: Added to registry: /jenkinst-test
jenkinst-test/jenkins-logs/rcj/test/sub-test/sub-sub-test10/var/log/extra/rpm-list.txt.gz
Files will be stored in the following way:
$ jq < shipper_registry.json
{
"ParsedFiles": [
{
"name": "/jenkinst-test/jenkins-logs/rcj/test/sub-test/sub-sub-test/var/log/extra/rpm-list.txt.gz",
"date": "2022-11-18T21:04:53.773777134+01:00"
},
{
"name": "/jenkinst-test/jenkins-logs/rcj/test/sub-test/sub-sub-test10/var/log/extra/rpm-list.txt.gz",
"date": "2022-11-18T21:04:53.773781056+01:00"
},
]
}