
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 pidlogstash安装
下载 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');
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)