ELK搭建及log4js通过tcp

ELK搭建及log4js通过tcp,第1张

ELK搭建及log4js通过tcp ELK搭建及tcp_udp日志传输 ELK概述

ELK是Elasticsearch、Logstash、Kibana的简称,是近乎完美的开源实时日志分析平台。这三者是日志分析平台的核心组件,而并非全部。

组件:

elasticsearch(对格式化后的数据进行索引和存储):

是实时全文搜索和分析引擎,提供搜集、分析、存储数据三大功能,是一套开放REST和JAVA API等结构提供高效搜索功能,可扩展的分布式系统。它构建于Apache Lucene搜索引擎库之上。
具有分布式,零配置,自动发现,索引自动分片,索引副本机制,restful 风格接口,多数据源,自动搜索负载等特点

logstash(将日志格式化):

它支持几乎任何类型的日志,包括系统日志、错误日志和自定义应用程序日志。
它可以从许多来源接收日志,这些来源包括 syslog、消息传递(例如 RabbitMQ)和JMX,它能够以多种方式输出数据,包括电子邮件、websockets和Elasticsearch。

kibana(前端数据的展示):

是一个基于Web的图形界面,用于搜索、分析和可视化存储在 Elasticsearch指标中的日志数据。
它利用Elasticsearch的REST接口来检索数据,不仅允许用户创建他们自己的数据的定制仪表板视图,还允许他们以特殊的方式查询和过滤数据,Kibana 可以为 Logstash 和 Elasticsearch 提供友好的日志分析 web 界面,可以帮助你汇总、分析和搜索重要数据日志

插件:

elasticsearch-head(显示ES集群分片情况和数据查询浏览等):

elasticsearch-head将是一款专门针对于elasticsearch的客户端工具

elasticsearch搭建

环境准备

Linux version 3.10.0-1062.el7.x86_64

Red Hat 4.8.5-36

JDK1.8

es不能用root用户

可以用docker安装可以创建ES用户(本文选择了这个)

#创建用户
useradd elastic
#设置密码
passwd elastic

创建/export/sever目录

mkdir -p /export/server/es

给目录权限–(注意涉及到es相关的文件目录最好都给elastic权限)

chown -R elastic:elastic /export/server/es

配置elastic用户的sudo权限

visudo
#100行左右添加:
elastic  	ALL=(ALL)		NOPASSWD: ALL

使用elastic用户使用管理员命令时要加上sudo

修改资源配置

sudo vi /etc/security/limits.conf
#在文件的末尾添加以下内容,*号不能去掉

* soft nofile 65536
* hard nofile 131072
* soft nproc 4096
* hard nproc 4096
sudo sed -i '/^#DefaultLimitNOFILE=/aDefaultLimitNOFILE=4096' /etc/systemd/system.conf 
sudo sed -i '/^#DefaultLimitNPROC=/aDefaultLimitNPROC=4096' /etc/systemd/system.conf 
#临时设置
sudo  sysctl -w vm.max_map_count=262144
#永久设置
sudo vim /etc/sysctl.d/99-sysctl.conf
#添加这一行
vm.max_map_count=262144
#检查是否成功
sudo sysctl -a | grep "vm.max_map_count"

如果使用了远程连接(例如:SecureCRT)这时需要断开重连 ES的安装

下载elastic search:https://elasticsearch.cn/download/ 选择想要安装的版本

cd ~
#上传到机器elastic用户下 (需要安装lrzsz包)
rz 
#解压(这里使用的是6.0.0版本,可以选择其他版本,注意确保所有安装的组件和插件版本要一致)
tar -zxvf elasticsearch-6.0.0-linux-x86_64.tar.gz -C /export/server/es/

修改核心配置文件

cd /export/server/es/elasticsearch-7.6.1/
vim config/elasticsearch.yml
cluster.name: es-cluster
node.name: es-node1
path.data: /export/server/es/elasticsearch-6.0.0/datas
path.logs: /export/server/es/elasticsearch-6.0.0/logs
network.host: node1
http.port: 9200
#多台机器的话可以配置多台
discovery.zen.ping.unicast.hosts: ["node1"]
#linux安装es的一个bug解决的配置
bootstrap.system_call_filter: false
bootstrap.memory_lock: false
#是否支持跨域
http.cors.enabled: true
#*表示支持所有域名
http.cors.allow-origin: "*"

修改JVM配置文件

vim config/jvm.options
#22-23行
-Xms256m
-Xmx256m

启动es

cd /export/server/es/elasticsearch-6.0.0/bin
#直接启动
./elasticsearch
#后台启动
./elasticsearch >> /dev/null &

在web端登录查看(注意需要在windows本地配置映射)

node1:9200
#显示基本信息就配置成功
es-head安装

es-head需要依赖node环境,需要安装node js

https://nodejs.org/en/download/
tar -zxvf node-v16.13.1-linux-x64.tar.xz -C /export/server/es

修改环境变量

sudo vim /etc/profile
export NODE_HOME=/export/server/es/node-v16.13.1-linux-x64
export PATH=:$PATH:$NODE_HOME/bin
#刷新环境变量
source /etc/profile

检查是否安装成功

node -v
npm -v

下载es-head

https://github.com/mobz/elasticsearch-head

解压

rz 
tar -zxvf elasticsearch-head-compile-after.tar.gz -C /export/server/es/

修改配置文件

修改Gruntfile.js

cd /export/server/es/elasticsearch-head
vim Gruntfile.js
#93行
hostname:'node1'

修改app.js

cd /export/server/es/elasticsearch-head/_site
vim app.js
#4354行
this.base_uri = this.config.base_uri || this.prefs.get("app-base_uri") || "http://node1:9200";

启动es-head

cd /export/server/es/elasticsearch-head/node_modules/grunt/bin
#直接启动
./grunt server 
#后台启动
./grunt server >> /dev/null &
#查看进程
netstat -atunlp | grep 9100

访问 http://node1:9100/ kibana安装

下载 https://elasticsearch.cn/download/ (注意版本)上传解压修改配置

cd /export/server/es/kibana-6.0.0-linux-x86_64/
vim config/kibana.yml
# 7行:Kibana服务地址
server.host: "node1"
# 25行:修改显示名称
server.name: "es-kibana"
# 28行:修改es地址
elasticsearch.hosts: ["http://node1:9200"]

启动

cd /export/server/es/kibana-6.0.0-linux-x86_64
#直接启动
bin/kibana 
#后台启动
bin/kibana >> /dev/null &

查看进程

ps -ef | grep 5601

web登录

node1:5601

注意:如果端口号被占用请用下面代码

lsof -i:5601
kill -9 pid
logstash安装

下载 https://elasticsearch.cn/download/ (注意版本)

上传

解压

测试(因为我们要对log4js的日志要通过tcp或者udp放到es中,所以指定文件要这样写)

vim tcp_udp.json

(注意:如果不熟悉可以提前去网上找几个测试的例子跑一下看看效果)

#input与output中间可以加filter用于对input的数据格式进行解析
input { 
    stdin { } 
    udp {
        host => "0.0.0.0"
        # 从5050端口获取日志
        port => 5050
        type => "udp"
    }
    tcp {
        mode => "server"
        host => "0.0.0.0"
        # 从5050端口取日志
        port => 5050
        codec => json_lines
        type => "tcp"
    }
}
 
output {
        stdout { codec => rubydebug }
    if [type] == "udp" {
        elasticsearch {
            hosts => ["192.168.88.100:9200"]
            index => "logstash-udp-%{+YYYY.MM.dd}"
        }
    }
    if [type] == "tcp" {
        elasticsearch {
            hosts => ["192.168.88.100:9200"]
            index => "logstash-tcp-%{+YYYY.MM.dd}"
        }
    }
    
}

启动logstash

cd /export/server/logstash-6.0.0/bin
#直接启动
./logstash -f ../testFile/tcp_udp.json (json文件的路径)

配置

可以去…/config/logstash.yml文件中将端口号和ip配置打开,然后在web端查看logstash启动信息 log4js配置

log4js.json

{
  "appenders": {
    "access": {
      "type": "dateFile",
      "filename": "./logs/access.log",
      "pattern": "-yyyy-MM-dd"
    },
    "dependencies": {
      "body-parser": "1.19.1",
      "compression": "1.7.4",
      "cookie-parser": "1.4.6",
      "ejs": "3.1.6",
      "express": "4.17.2",
      "forever": "4.0.1",
      "http-proxy-middleware": "2.0.1",
      "log4js": "6.3.0",
      "log4js-logstash-tcp": "2.0.3",
      "serve-favicon": "2.5.0"
    },
      "rule-console": {
      "type": "console"
    },
    "rule-file": {
      "type": "dateFile",
      "filename": "./logs/server-",
      "encoding": "utf-8",
      "maxLogSize": 10000000,
      "numBackups": 3,
      "pattern": "yyyy-MM-dd.log",
      "alwaysIncludePattern": true
    },
    "rule-error": {
      "type": "dateFile",
      "filename": "./logs/error-",
      "encoding": "utf-8",
      "maxLogSize": 1000000,
      "numBackups": 3,
      "pattern": "yyyy-MM-dd.log",
      "alwaysIncludePattern": true
    }
  },
  "categories": {
    "default": {
      "appenders": [
        "rule-console",
        "rule-file",
        "rule-error"
      ],
      "level": "debug"
    },
    "http": {
      "appenders": [
        "access"
      ],
      "level": "info"
    }
  }
}


udp.js

var log4js = require('log4js');
log4js.configure(
    {
        appenders: {
            logstash: {
                type: '@log4js-node/logstashudp',
                host: '192.168.88.100',
                port: 5050
            }
        },
        categories: {
            default: {appenders: ['logstash'], level: 'all'}
        }
    })

const logger = log4js.getLogger('测试数据');
logger.error("important log message", {cheese: 'gouda', biscuits: 'hobnob'});
logger.warn("important log message", {cheese: 'gouda', biscuits: 'hobnob'});
logger.info("important log message", {cheese: 'gouda', biscuits: 'hobnob'});

tcp.js

var log4js = require('log4js');
log4js.configure({
    appenders: {
        logstash: {
            type: 'log4js-logstash-tcp',
            host: '192.168.88.100',
            port: 5050
        }
    },
    categories: {
        default: {appenders: ['logstash'], level: 'debug'}
    }
});

var log = log4js.getLogger('测试数据');

log.error('test');

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5700831.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存