logfarm

command module
v0.0.0-...-a9b91a4 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 10, 2022 License: ISC Imports: 1 Imported by: 0

README

🗒️🚜 logfarm

GoDoc Go Report Card License Go version

A syslog server written in Golang. In development, use at your own risk.

Get Started (Docker)

To get started quickly, just run the containerized version of logfarm via docker compose. Start by creating a docker-compose.yml file with the following content:

version: '3.8'
services:
  app:
    container_name: logfarm_app
    image: 'bartmika/logfarm:latest'
    stdin_open: true
    environment:
        LOGFARM_IP: 0.0.0.0
        LOGFARM_PORT: 514
        LOGFARM_DB_FILEPATH: ./db
        LOGFARM_SETTING_MAX_DAY_AGE: 30 # Maximum days the records can exist in database before old records get deleted.
    restart: unless-stopped
    ports:
      - "514:514/udp" # Opens UDP 514 required for syslog as specified RFC5424. Do not remove!
    volumes: # Connect the local filesystem with the docker filesystem.
      - ./:/go/src/github.com/bartmika/logfarm # IMPORTANT: Required for hotreload via `CompileDaemon`. Do not remove!
      - app_data:/go/src/github.com/bartmika/logfarm/db # Location of the database. Do not remove!

volumes:
    app_data:

Afterwords run:

$ docker compose up -d

This will start logfarm with listening on port 514 (UDP) on the host for incoming RFC5424 syslog packets and store them into an SQLite database stored in default location.

Get Started (Golang)

To get started without any containerization, the following steps can help.

Before you begin. Clone the project.

cd ~/go/src/github.com
mkdir bartmika
cd bartmika
git clone git@github.com:bartmika/logfarm.git
cd logfarm

Install the dependencies.

go mod tidy

Add environment variables:

export LOGFARM_IP=127.0.0.1
export LOGFARM_PORT=514
export LOGFARM_DB_FILEPATH=./db
export LOGFARM_SETTING_MAX_DAY_AGE=30

Run the application.

go run main.go serve

Usage

Terminal

To send a syslog message through your terminal to logfarm, run the following:

nc -w0 -u 127.0.0.1 514 <<< "testing again from my home machine"

Explanation:

  • -w0 set timeout to zero second
  • -u is to use UDP protocol
  • 514 represent port 514

Now check your logfarm server, you should see the message you just send.

Golang

Here is a sample code of sending log in your code.

package main

import (
	"log/syslog"

	"github.com/rs/zerolog"
)

func main() {
    logwriter, _ := syslog.Dial("udp", "localhost:514", syslog.LOG_DEBUG|syslog.LOG_ERR|syslog.LOG_INFO, "logfarm")

    // UNIX Time is faster and smaller than most timestamps
    zerolog.TimeFieldFormat = zerolog.TimeFormatUnix

    log := zerolog.New(logwriter).With().
        Str("cmd", "send"). // Add extra context items.
        Timestamp().        // Add timestamp to every call.
        Caller().           // Add line numbers to every call.
        Logger()

    log.Info().Msg(sendMessage) // The content message to send.

    // DEVELOPERS NOTE:
    // EXAMPLE CONTENT OUTPUT:
    // {"level":"info","command":"send","caller":"/Users/bmika/go/src/github.com/bartmika/logfarm/cmd/send.go:44","message":"This is a test message"}
}

Contributing

Found a bug? Want a feature to improve the package? Please create an issue.

License

Made with ❤️ by Bartlomiej Mika.
The project is licensed under the ISC License.

Resource used:

Documentation

The Go Gopher

There is no documentation for this package.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL