An open API service indexing awesome lists of open source software.

https://github.com/artdecocode/logarithm

A Koa Middleware For Web-Server To Record Hits In ElasticSearch.
https://github.com/artdecocode/logarithm

Last synced: about 2 months ago
JSON representation

A Koa Middleware For Web-Server To Record Hits In ElasticSearch.

Awesome Lists containing this project

README

          

# logarithm

[![npm version](https://badge.fury.io/js/logarithm.svg)](https://www.npmjs.com/package/logarithm)

`logarithm` Is A Koa Middleware That Records Logs In _ElasticSearch_. The CLI binary also allows to execute commands on the _ElasticSearch_ instance via the API, such as:

- creating snapshots,
- installing templates,
- _etc_

```sh
yarn add logarithm
```

## Table Of Contents

- [Table Of Contents](#table-of-contents)
- [API](#api)
- [`logarithm(options: !Config): !_goa.Middleware`](#logarithmoptions-config-_goamiddleware)
* [`Config`](#type-config)
* [`Hit`](#type-hit)
- [`async ping(url: string, timeout: number): void`](#async-pingurl-stringtimeout-number-void)
- [CLI](#cli)
* [List Templates, `-T`](#list-templates--t)
* [Statistics, `-s`](#statistics--s)
- [Copyright & License](#copyright--license)



## API

The package is available by importing its default function and a named function:

```js
import logarithm, { ping } from 'logarithm'
```



## logarithm(
  `options: !Config,`
): !_goa.Middleware
Creates a middleware for logging requests in _Koa_/_Goa_ web-server and returns it.

- options* !Config: Options for the middleware.

__`Config`__: Options for the program.


Name
Type & Description
Default


app*
string
-




The name of the website application.



url*
string
-




ElasticSearch endpoint URL, e.g., http://192.168.0.1:9200.



timeout
number
5000




Timeout for the connection after which an error is shown.



pipeline
string
info




The pipeline in ElasticSearch, for example to parse GeoIP info and User-Agent.



index
string
-




The name of the index. Defaults to the app name if not specified.



strategy
(index: string, date: !Date) => string




How to construct the index name. By default, monthly strategy is used: ${index}-${yyyy}.${mm}.

index* string: The general name of the index.

date* !Date: The date of the request.

```js
/* yarn example/ */
import core from '@idio/idio'
import logarithm, { ping } from 'logarithm'

(async () => {
await ping(process.env.ELASTIC)

// setup for idio web-server
const { url, app } = await core()

app.use(logarithm({
app: 'idio.cc',
url: process.env.ELASTIC,
index: 'clients',
}))
app.use(async (ctx) => {
ctx.body = 'hello world'
})
console.log(url)
})()
```

The following data structure is sent to the server:

__`Hit`__: A record sent to ElasticSearch.

| Name | Type | Description |
| ------------ | ---------------- | ------------------------------------------------- |
| __app*__ | string | The application name from the config. |
| __ip*__ | string | Client IP address. |
| __path*__ | string | The decoded request path. |
| __headers*__ | !Object | The request headers. |
| __status*__ | number | The status code. |
| __date*__ | !Date | The date of the request. |
| __method*__ | string | The method of the request, e.g., `GET` or `POST`. |
| query | !Object | Possible query from the request. |



## async ping(
  `url: string,`
  `timeout: number,`
): void
Check that a connection to the _ElasticSearch_ server can be established. Will throw an error after timeout.

- url* `string`: The ElasticSearch URL.
- timeout* `number`: The timeout for the request in ms.



## CLI

_Logarithm_ also provides a CLI tool to be able to install index patterns and a pipeline for the use by the middleware API.

```js
logarithm -h
```

```Dockerfile
ElasticSearch utility for creating a pipeline and index templates
for logging request using logarithm middleware.

logarithm [-TPS] [-p pipeline] [-d]

url The ElasticSearch URL.
If protocol is not given, `http` is assumed.
--stats, -s Display statistics by indices.
--templates, -T List all index templates.
--delete, -d Delete an index, snapshot or pipeline.
Used with the relevant flag.
--index, -i Select an index for operations.
--pipeline, -p Create a pipeline with `User-Agent`
and `GeoIp` plugins.
--pipelines, -P Display installed pipelines.
--snapshots, -S List registered snapshot repositories.
--help, -h Print the help information and exit.
--version, -v Show the version's number and exit.

Snapshots: used to print info, create and restore snapshots.

logarithm [-r repo] [-s snapshot] [-s3 snapshot --bucket bucket] [--status|-d]

--repository-s3, -s3 Create a new `s3` snapshot repo with this name.
--bucket The bucket name for the `s3` snapshot repository.
--repo, -r The name of the repo.
--snapshot, -s The name of the snapshot.
--restore Restore this snapshot.
--status Fetch the status.

Templates: creates a template for an app.

logarithm -t {app-name} [-s shards] [-r replicas] [-d]

--template, -t Create an index template for storing
log data in the `{template}-*` index.
--shards, -s The number of shards for index template.
Default: 1.
--replicas, -r The number of replicas for index template.

Methods: send data from JSON files.

logarithm [--post data.json] -p path

--post Send POST request with data from the file.
--path, -p The path to send a request to.
```

📙 [Read Wiki](../../wiki) For More Documentation



### List Templates, `-T`

To see what templates are installed.

```sh
logarithm 192.168.0.1:9200 -T
```

```fs
Name Patterns Shards Replicas
kibana_index_template:.kibana .kibana 1
hits-logarithm.page logarithm.page-* 1 0
hits-clients clients-* 1 0
hits-client2 client2-* 1 0
```



### Statistics, `-s`

The stats can be used to monitor created indices.

```sh
logarithm 192.168.0.1:9200 -s
```

```sh
Name Memory Docs Size
logarithm.page 11.6 KB 1 21.6 KB
logarithm.page-2018.12 60.4 KB 8859 3.3 MB
logarithm.page-2018.11 64.4 KB 116 179.5 KB
logarithm.page-2019.2 151.4 KB 63 279.1 KB
logarithm.page-2019.1 120.7 KB 5747 2.2 MB
```

## Copyright & License

GNU Affero General Public License v3.0




Art Deco


© Art Deco™ 2020