wazuh-kibana-app/server/logger.js
Juanca Rodríguez 8e9dff0737
Backports for Wazuh 3.12.0 [6.8.7] (#2132)
* Remove console.log

* Navigate from agents dashboard

* Change state by props

* Fix settings-wizard

* Fix when joinning hosts and registry

* Check for new API entries

* Close add api component

* Remove await

* Improve checks for new apis

* Test if API is down in wazuh-api

* Check down APIs

* Api is down component finish

* Transform hosts in the backend

* Fix key

* Adapt removeOrphanentries

* Adapt settings-wizard

* Improve api-is-down component

* Change  the way to display the helpers components

* Check APIs status when get them

* Remove console.log

* Check manager sets the status to the API entry

* Prevent create wazuh-registry.json without hosts

* FIx extensions

* Add panel

* Change style for wazuh hosts

* Show add api component from the table

* Refresh API entries

* Update wazuh-hosts

* Api is down table loading effect

* Show API is down when accessing to settings if any API is up

* Update cluster info in the settings wizard

* Update Kibana version

* Refactor design of guides

* Change color

* Remove wazuh-hosts.yml

* Remove hosts from configuration

* Change foreach by for

* Solves asynchronous problem

* Adapt ruleset handler

* Upload files

* Add more modules to the guide

* Show what files were upload and hwat not

* Detail the error

* Expand fail list

* Add button to refresh lists

* Fix \n in the migration

* Fix api-count

* Back from dahsboards

* Fix typo

* Fix when getting an empty file

* Prevent empty lines in cdb lists

* Hide index pattern is there are only one

* Add missing `await`

* Fix eui loader

* Change the properties of register-agent component

Set the background to transparent
Change the title: Add => Deploy

* Add register-agent component to add user to group

* Show button in general when no agents registered

* Show button in FIM when no agents registered

* Hide Logtest and Test config

* Update output of success/fail uploaded files

* More modules

* Some fixes

* Fix API wizard

* Add the RegisterAgent component to overview

* Make module selector scrollable and fit current screen

* Add Rootcheck. Fix extra attributes

* Add reconnect_time to log collection section

* Fix example in getting started guide

* Detect if is Agent

* Scroll to bottom when configuration is generated

* Fix groups interactive guide

* Revert "Merge branch 'extend-add-new-agent-1767' of https://github.com/wazuh/wazuh-kibana-app"

This reverts commit 7e56d49a75, reversing
changes made to 7706a2e853.

* Fix style

* Avoid error when agent is not Active

* Revert "Revert "Merge branch 'extend-add-new-agent-1767' of https://github.com/wazuh/wazuh-kibana-app""

This reverts commit 6724d12571.

* Delete from groups.html the actrl instance

* Fix typos

* Refresh hosts in api-is-down component

* Set default in props

* Fix API count

* Iterates the api entries to set one as default

* Fix component unmount

* Fix flick

* Validate method and path in Requests

* Adapt 7.4 to 3.10

* Bump version (547)

* Fix the documentation broken links (#1853)

* Update AWS map

* Remove babel-polyfill

* Remove babel-polyfill

* Restore babel-polyfill for cover simple-tail dependency

* Restore babel-polyfill for cover simple-tail dependency

* Filters fix (#1854)

* Filters fix

* Fix the documentation broken links (#1853)

* Update AWS map

* Removed Discover component from top menu

* Update readme

* Bump version

* Set the correct field in the geoMap viz

* Bump version (549 for 3.10.2-7.4.2)

* Revert "Set the correct field in the geoMap viz"

This reverts commit effc3b8b55.

* Update branch for 7.4.2

* Update README.md

* Update package.json

* Fix logo when reverse proxy is enabled (#1888)

* Fix hidden overflow in the fim configuration (#1887)

* Fix ambiguous message (#1875)

* Amazon s3 status fix (#1889)

* Fix amazon s3 status error

* Fix check aws s3 status

* Update wz-no-config.html

* Add pinned filters after refresh (#1909)

* Fix missing fields in the Visualizations (#1913)

* Fixed infinite load on Ciscat view (#1916)

* Fixed infinite load on Ciscat-agent view (#1920)

* Normalize the field whodata in the group reporting (#1921)

* Fix registration guide (#1926)

* Fix decoders file (#1929)

* Add new table for windows hotfixes (#1932)

* Remove visualizations legend (#1936)

* XML validator false error for \< (#1895)

* Add validator true to \<

* Add to gitignore wazuh-registry

* Minor Fix

* Revert changes for package.json and gitignore

* Refactor syscheck table (#1941) (#1956)

* Fix missing fields in the Visualizations (#1913)

* Fixed infinite load on Ciscat view (#1916)

* Fixed infinite load on Ciscat-agent view (#1920)

* Normalize the field whodata in the group reporting (#1921)

* Fix registration guide (#1926)

* Fix decoders file (#1929)

* Add new table for windows hotfixes (#1932)

* Remove visualizations legend (#1936)

* XML validator false error for \< (#1895)

* Add validator true to \<

* Add to gitignore wazuh-registry

* Minor Fix

* Revert changes for package.json and gitignore

* Refactor syscheck table

* Set fixed width to table columns

* Expand row to get extra details

* Add search bar & allow search

* Show extra details on row expand

* Remove table description

* Fix table margin

* Remove wazuh-registry

* Add go to edit file in rules and decoders, when it has been created correctly (#1943)

* Adapt for 7.5.0

* Bump version to 7.5.0

* Adapt server 7.5.0

* Fix typo

* Add fix to adapt 7.5.0

* Adapt server for Kibana 7.5.0

* Remove the table images from the reports

* Fix the tables in the reports

* Fix the hidden content in management>configuration (#1840)

* Fix discover input styling

* Fix most active agent

* Change the revision number

* Fix the undefined value of filters in the reports

* Restore package.json dependency

* Adapt 7.5.0 in 3.11 (#1960)

* Adapt Kibana for 7.5.0

* Several fixes

* Fix filters

* Bump wazuh version to 3.11.0

* Revert "Adapt 7.5.0 in 3.11 (#1960)"

This reverts commit 8f9c9aa95a.

* Adapt 7.5.0 for 3.11 (#1961)

* Adapt Kibana for 7.5.0

* Several fixes

* Fix filters

* Bump wazuh version to 3.11.0

* Prepare branch for release

* Last fixes in the branch 3.11-7.5 (#1966)

* Fixed broken link to the documentation

* Update README

* Change plugin-helpers reference in package.json

* Fix the empty search in syscheck-table

* Fix the dead visualizations on CIS-CAT

* Update CHANGELOG.md file

* Adapt for Kibana 7.5.1

* Adapt for Kibana 7.5.1

* Upadte package list

* Fix ciscat panel

* Adapt to 7.5.1

* Prevent reload when click in the sameTab

* Revert "Prevent reload when click in the sameTab"

This reverts commit 7e1deb1f07.

* Update version files (#1973)

* Update revision code

* Update readme

* Update Changelog

* Update version number of kibana

* Added xpack compatibility (#1971)

* Update files (#1975)

* Update readme file

* Update changelog file

* Bump Wazuh version to 3.11.1

* Add validator true to -- within a commentary (#1980)

* Increased list filesize limit and fixed typo (#1993)

As mentioned in #1947 the limit for uploading a list for the CDB-list capability is too low and the resulting error message contains a typo.

This commit addresses that by increasing the limit to 5MB and fixing the typo.

* Fix maps vis load

* Bump version 3.11.2

* Bump for 7.5.2

* Fix Wazuh version in upgrade guide (#2023)

The upgrade guide is using a previous version of Wazuh 3.11.1-7.5.2 when the latest version is 3.11.2-7.5.2.

* Add WindowsUpdate table to report (#2028)

* Bump for Wazuh 3.11.3

* Cancel listener on destroy kibana discover

* Fix custom spaces infinite loop

* Fix reporting in syscollector

* Adapt for 7.6.0

* Update routes kibana

* Modified upgrade guide

* Bump for 3.11.4

* Update kibana-discover.js

* Update package.json

* Update CHANGELOG.md

* Delete wazuh-registry.json

* update changelog master

* Adapt for 7.6.1

* Fix reporting syscheck negative values in atrributes

* Adapt discover

* Fix visualizations report on chrome

* Restructure optimize/wazuh folder (#2116)

* Restructure optimize/wazuh folder

* Update protocol of initial config example

* Replace path with a constant

* Remove wazuh.yml file

* Update README upgrade guide

* Fix plugin helper error

Co-authored-by: Pablo Torres <pablotr9@correo.ugr.es>

* hide manager alerts

* Add rule group win_auth_failure to metrics (#2099)

* Add PCI 11.2.1 y 11.2.3 rules. (#2062)

* Discover in monitoring

* Close 3.12-7.6

* Update changelog

* Update package.json

* Update package.json

* merge discover

* merge 7.6

* merge 7.6

* Update CHANGELOG.md

* Update package.json

* Fix merge

* Close 6.8.7

* Allow disabling known fields health check (#2037)

* Add https to initial wazuh configuration

* Add https to Wazuh config example

* update changelog

* Fix reports path error

* Add checks.fields to initial default config

* Update initial-wazuh-config.js

Co-authored-by: Adri Valle <adri9valle@gmail.com>
Co-authored-by: Jose Sanchez <josesanxez@gmail.com>
Co-authored-by: Pablo <pablotr9@correo.ugr.es>
Co-authored-by: Alberto Andújar <josealbertoandujar@gmail.com>
Co-authored-by: Daniel Ruiz Capilla <daniel.ruiz@wazuh.com>
Co-authored-by: Juan Carlos Tello <juancarlos.tello@wazuh.com>
Co-authored-by: Victor Santaella <victorst79@gmail.com>
2020-03-12 09:56:52 +01:00

201 lines
5.1 KiB
JavaScript

/*
* Wazuh app - Module for logging functions
* Copyright (C) 2015-2019 Wazuh, Inc.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* Find more information about this on the LICENSE file.
*/
import winston from 'winston';
import fs from 'fs';
import path from 'path';
import { getConfiguration } from './lib/get-configuration';
let allowed = false;
let wazuhlogger = undefined;
let wazuhPlainLogger = undefined;
const logsBasePath = '../../../optimize/wazuh/logs'
const plainLogFilePath = `${logsBasePath}/wazuhapp-plain.log`
const rawLogFilePath = `${logsBasePath}/wazuhapp.log`
/**
* Here we create the loggers
*/
const initLogger = () => {
const configurationFile = getConfiguration();
const level =
typeof (configurationFile || {})['logs.level'] !== 'undefined' &&
['info', 'debug'].includes(configurationFile['logs.level'])
? configurationFile['logs.level']
: 'info';
// JSON logger
wazuhlogger = winston.createLogger({
level,
format: winston.format.json(),
transports: [
new winston.transports.File({
filename: path.join(
__dirname,
rawLogFilePath
)
})
]
});
// Prevents from exit on error related to the logger.
wazuhlogger.exitOnError = false;
// Plain text logger
wazuhPlainLogger = winston.createLogger({
level,
format: winston.format.simple(),
transports: [
new winston.transports.File({
filename: path.join(
__dirname,
plainLogFilePath
)
})
]
});
// Prevents from exit on error related to the logger.
wazuhPlainLogger.exitOnError = false;
};
/**
* Checks if wazuh/logs exists. If it doesn't exist, it will be created.
*/
const initDirectory = async () => {
try {
if (!fs.existsSync(path.join(__dirname, '../../../optimize/wazuh'))) {
fs.mkdirSync(path.join(__dirname, '../../../optimize/wazuh'));
}
if (!fs.existsSync(path.join(__dirname, logsBasePath))) {
fs.mkdirSync(path.join(__dirname, logsBasePath));
}
if (
typeof wazuhlogger === 'undefined' ||
typeof wazuhPlainLogger === 'undefined'
) {
initLogger();
}
allowed = true;
return;
} catch (error) {
allowed = false;
return Promise.reject(error);
}
};
/**
* Returns given file size in MB, if the file doesn't exist returns 0
* @param {*} filename Path to the file
*/
const getFilesizeInMegaBytes = filename => {
if (allowed) {
if (fs.existsSync(filename)) {
const stats = fs.statSync(filename);
const fileSizeInMegaBytes = stats.size;
return fileSizeInMegaBytes / 1000000.0;
}
}
return 0;
};
/**
* Checks if the wazuhapp.log file size is greater than 100MB, if so it rotates the file.
*/
const checkFiles = () => {
if (allowed) {
if (
getFilesizeInMegaBytes(
path.join(__dirname, rawLogFilePath)
) >= 100
) {
fs.renameSync(
path.join(__dirname, rawLogFilePath),
path.join(
__dirname,
`${logsBasePath}/wazuhapp.${new Date().getTime()}.log`
)
);
fs.writeFileSync(
path.join(__dirname, rawLogFilePath),
JSON.stringify({
date: new Date(),
level: 'info',
location: 'logger',
message: 'Rotated log file'
}) + '\n'
);
}
if (
getFilesizeInMegaBytes(
path.join(__dirname, plainLogFilePath)
) >= 100
) {
fs.renameSync(
path.join(__dirname, plainLogFilePath),
path.join(
__dirname,
`${plainLogFilePath}.${new Date().getTime()}.log`
)
);
}
}
};
const yyyymmdd = () => {
const now = new Date();
const y = now.getFullYear();
const m = now.getMonth() + 1;
const d = now.getDate();
const seconds = now.getSeconds();
const minutes = now.getMinutes();
const hour = now.getHours();
return `${y}/${m < 10 ? '0' : ''}${m}/${
d < 10 ? '0' : ''
}${d} ${hour}:${minutes}:${seconds}`;
};
/**
* Main function to add a new log
* @param {*} location File where the log is being thrown
* @param {*} message Message to show
* @param {*} level Optional, default is 'error'
*/
export function log(location, message, level) {
initDirectory()
.then(() => {
if (allowed) {
checkFiles();
wazuhlogger.log({
date: new Date(),
level: level || 'error',
location: location || 'Unknown origin',
message: message || 'An error occurred'
});
try {
wazuhPlainLogger.log({
level: level || 'error',
message: `${yyyymmdd()}: ${location ||
'Unknown origin'}: ${message || 'An error occurred'}`
});
} catch (error) {} // eslint-disable-line
}
})
.catch(error =>
// eslint-disable-next-line
console.error(
`Cannot create the logs directory due to:\n${error.message || error}`
)
);
}