initial commit
This commit is contained in:
commit
def081164d
23
README.md
Normal file
23
README.md
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
# elastic-monit
|
||||||
|
|
||||||
|
### Index [monit](https://git.manalejandro.com/ale/docker-monit) metrics into `ElasticSearch` node to do stats and more.
|
||||||
|
|
||||||
|
## Install
|
||||||
|
|
||||||
|
```
|
||||||
|
$ npm install or yarn
|
||||||
|
```
|
||||||
|
|
||||||
|
## Config
|
||||||
|
|
||||||
|
Edit `config.js` file with your settings.
|
||||||
|
|
||||||
|
## Run
|
||||||
|
|
||||||
|
```
|
||||||
|
$ node index.js
|
||||||
|
```
|
||||||
|
|
||||||
|
## License
|
||||||
|
|
||||||
|
MIT
|
15
config.js
Normal file
15
config.js
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
module.exports = {
|
||||||
|
elasticnode: 'http://elastic-node:9200',
|
||||||
|
index: 'monit',
|
||||||
|
monitnodes: [
|
||||||
|
'192.168.2.12',
|
||||||
|
'192.168.2.3',
|
||||||
|
'192.168.2.2',
|
||||||
|
'192.168.2.9',
|
||||||
|
'192.168.2.11'
|
||||||
|
],
|
||||||
|
username: 'admin',
|
||||||
|
password: 'monit',
|
||||||
|
timeout: 4000,
|
||||||
|
poll: 30000
|
||||||
|
}
|
51
index.js
Normal file
51
index.js
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
const { XMLParser } = require("fast-xml-parser"),
|
||||||
|
{ Client } = require('@elastic/elasticsearch'),
|
||||||
|
config = require('./config.js'),
|
||||||
|
parser = new XMLParser({ ignoreDeclaration: true, ignorePiTags: true }),
|
||||||
|
client = new Client({ node: config.elasticnode }),
|
||||||
|
monitnodes = config.monitnodes,
|
||||||
|
username = config.username,
|
||||||
|
password = config.password,
|
||||||
|
request = async uri => {
|
||||||
|
const ac = new AbortController()
|
||||||
|
setTimeout(() => {
|
||||||
|
ac.abort()
|
||||||
|
}, 5000)
|
||||||
|
const response = await fetch(uri, {
|
||||||
|
signal: ac.signal,
|
||||||
|
keepalive: false,
|
||||||
|
timeout: config.timeout,
|
||||||
|
headers: {
|
||||||
|
Authorization: `Basic ${btoa(`${username}:${password}`)}`
|
||||||
|
}
|
||||||
|
}),
|
||||||
|
xml = await response.text()
|
||||||
|
setImmediate(() => { ac.abort() })
|
||||||
|
return xml
|
||||||
|
},
|
||||||
|
index = async (node, data) => {
|
||||||
|
await client.index({
|
||||||
|
index: config.index,
|
||||||
|
body: {
|
||||||
|
data,
|
||||||
|
node,
|
||||||
|
timestamp: new Date()
|
||||||
|
}
|
||||||
|
})
|
||||||
|
},
|
||||||
|
start = async () => {
|
||||||
|
await Promise.all(monitnodes.map(async node => {
|
||||||
|
try {
|
||||||
|
const xml = await request(`http://${node}:2812/_status?format=xml`),
|
||||||
|
json = parser.parse(xml)
|
||||||
|
await index(node, json)
|
||||||
|
} catch (e) {
|
||||||
|
console.error(e)
|
||||||
|
}
|
||||||
|
}))
|
||||||
|
setTimeout(async () => await start(), config.poll)
|
||||||
|
}
|
||||||
|
|
||||||
|
(async () => {
|
||||||
|
await start()
|
||||||
|
})()
|
204
mapping.json
Normal file
204
mapping.json
Normal file
@ -0,0 +1,204 @@
|
|||||||
|
{
|
||||||
|
"mappings": {
|
||||||
|
"properties": {
|
||||||
|
"data": {
|
||||||
|
"properties": {
|
||||||
|
"monit": {
|
||||||
|
"properties": {
|
||||||
|
"platform": {
|
||||||
|
"properties": {
|
||||||
|
"cpu": {
|
||||||
|
"type": "long"
|
||||||
|
},
|
||||||
|
"machine": {
|
||||||
|
"type": "keyword"
|
||||||
|
},
|
||||||
|
"memory": {
|
||||||
|
"type": "long"
|
||||||
|
},
|
||||||
|
"name": {
|
||||||
|
"type": "keyword"
|
||||||
|
},
|
||||||
|
"release": {
|
||||||
|
"type": "keyword"
|
||||||
|
},
|
||||||
|
"swap": {
|
||||||
|
"type": "long"
|
||||||
|
},
|
||||||
|
"version": {
|
||||||
|
"type": "keyword"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"server": {
|
||||||
|
"properties": {
|
||||||
|
"controlfile": {
|
||||||
|
"type": "keyword"
|
||||||
|
},
|
||||||
|
"httpd": {
|
||||||
|
"properties": {
|
||||||
|
"address": {
|
||||||
|
"type": "keyword"
|
||||||
|
},
|
||||||
|
"port": {
|
||||||
|
"type": "long"
|
||||||
|
},
|
||||||
|
"ssl": {
|
||||||
|
"type": "long"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"id": {
|
||||||
|
"type": "keyword"
|
||||||
|
},
|
||||||
|
"incarnation": {
|
||||||
|
"type": "long"
|
||||||
|
},
|
||||||
|
"localhostname": {
|
||||||
|
"type": "keyword"
|
||||||
|
},
|
||||||
|
"poll": {
|
||||||
|
"type": "long"
|
||||||
|
},
|
||||||
|
"startdelay": {
|
||||||
|
"type": "long"
|
||||||
|
},
|
||||||
|
"uptime": {
|
||||||
|
"type": "long"
|
||||||
|
},
|
||||||
|
"version": {
|
||||||
|
"type": "keyword"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"service": {
|
||||||
|
"properties": {
|
||||||
|
"boottime": {
|
||||||
|
"type": "long"
|
||||||
|
},
|
||||||
|
"collected_sec": {
|
||||||
|
"type": "long"
|
||||||
|
},
|
||||||
|
"collected_usec": {
|
||||||
|
"type": "long"
|
||||||
|
},
|
||||||
|
"filedescriptors": {
|
||||||
|
"properties": {
|
||||||
|
"allocated": {
|
||||||
|
"type": "long"
|
||||||
|
},
|
||||||
|
"maximum": {
|
||||||
|
"type": "text"
|
||||||
|
},
|
||||||
|
"unused": {
|
||||||
|
"type": "long"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"monitor": {
|
||||||
|
"type": "long"
|
||||||
|
},
|
||||||
|
"monitormode": {
|
||||||
|
"type": "long"
|
||||||
|
},
|
||||||
|
"name": {
|
||||||
|
"type": "keyword"
|
||||||
|
},
|
||||||
|
"onreboot": {
|
||||||
|
"type": "long"
|
||||||
|
},
|
||||||
|
"pendingaction": {
|
||||||
|
"type": "long"
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"type": "long"
|
||||||
|
},
|
||||||
|
"status_hint": {
|
||||||
|
"type": "long"
|
||||||
|
},
|
||||||
|
"system": {
|
||||||
|
"properties": {
|
||||||
|
"cpu": {
|
||||||
|
"properties": {
|
||||||
|
"guest": {
|
||||||
|
"type": "long"
|
||||||
|
},
|
||||||
|
"guestnice": {
|
||||||
|
"type": "long"
|
||||||
|
},
|
||||||
|
"hardirq": {
|
||||||
|
"type": "long"
|
||||||
|
},
|
||||||
|
"nice": {
|
||||||
|
"type": "long"
|
||||||
|
},
|
||||||
|
"softirq": {
|
||||||
|
"type": "float"
|
||||||
|
},
|
||||||
|
"steal": {
|
||||||
|
"type": "long"
|
||||||
|
},
|
||||||
|
"system": {
|
||||||
|
"type": "float"
|
||||||
|
},
|
||||||
|
"user": {
|
||||||
|
"type": "float"
|
||||||
|
},
|
||||||
|
"wait": {
|
||||||
|
"type": "float"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"load": {
|
||||||
|
"properties": {
|
||||||
|
"avg01": {
|
||||||
|
"type": "float"
|
||||||
|
},
|
||||||
|
"avg05": {
|
||||||
|
"type": "float"
|
||||||
|
},
|
||||||
|
"avg15": {
|
||||||
|
"type": "float"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"memory": {
|
||||||
|
"properties": {
|
||||||
|
"kilobyte": {
|
||||||
|
"type": "long"
|
||||||
|
},
|
||||||
|
"percent": {
|
||||||
|
"type": "float"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"swap": {
|
||||||
|
"properties": {
|
||||||
|
"kilobyte": {
|
||||||
|
"type": "long"
|
||||||
|
},
|
||||||
|
"percent": {
|
||||||
|
"type": "float"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"uptime": {
|
||||||
|
"type": "long"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node": {
|
||||||
|
"type": "keyword"
|
||||||
|
},
|
||||||
|
"timestamp": {
|
||||||
|
"type": "date"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
12
package.json
Normal file
12
package.json
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
{
|
||||||
|
"name": "elastic-monit",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"main": "index.js",
|
||||||
|
"author": "ale",
|
||||||
|
"license": "MIT",
|
||||||
|
"private": true,
|
||||||
|
"dependencies": {
|
||||||
|
"@elastic/elasticsearch": "^8.15.0",
|
||||||
|
"fast-xml-parser": "^4.4.1"
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user