前提,安装java8 的环境
一: 安装elasticsearch :
参考https://www.linuxidc.com/Linux/2016-06/132616.htm 安装之后发现启动不了,,找不到配置文件,尝试着修改,但没有成功,索性就放弃这种方式,改为手动安装: 一开始参考https://www.cnblogs.com/zhangxiaoliu/p/6891562.html 安装的elasticsearch-5.4.0 版本, 返现启动之后,,cpu 的占用非常高,服务器很卡顿,然后又换成了elasticsearch-6.2.4 版本,,没有再出现卡顿的状况,,我也不知道为啥TT
参考: https://blog.csdn.net/ProMonkey_chen/article/details/80489000
下载: wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.2.4.zip
解压: unzip elasticsearch-6.2.4.zip
然后我们通过如下命令进入bin目录: cd elasticsearch-6.2.4/bin/
接下来我们就可以启动我们的单节点集群: ./elasticsearch
注意:elasticsearch不支持root用户进行启动,用sdev 启动 所以我们需要在重新添加一个普通用户并赋予相应等权限,命令如下:
chown -R sdev:sdev /opt/elasticsearch-6.2.4
但是启动后又报错: max file descriptors [65535] for elasticsearch process is too low, increase to at least [65536]意思是 es能创建的文件数目太少,
解决方案:
编辑 /etc/security/limits.conf,追加以下内容;
* soft nofile 262144
* hard nofile 262144 // * 表示给所有用户起作用
此文件修改后需要重新登录用户,才会生效
本机测试: curl http://127.0.0.1:9200 返回一个json 字符串,就表示成功过了,,
外网测试: 浏览器访问: 外网ip+端口号 也是返回下面的json
{
name: "KBetdDz",
cluster_name: "elasticsearch",
cluster_uuid: "-E-U912CRtCNEFp_NWM-Ww",
version: {
number: "6.2.4",
build_hash: "ccec39f",
build_date: "2018-04-12T20:37:28.497551Z",
build_snapshot: false,
lucene_version: "7.2.1",
minimum_wire_compatibility_version: "5.6.0",
minimum_index_compatibility_version: "5.0.0"
},
tagline: "You Know, for Search"
}
安装ES 还可能遇到的问题: 参考: https://blog.csdn.net/qq_21387171/article/details/53577115
启动: ./bin/elasticsearch -d 后台运行,,
关闭: kill -9 pid
配置文件 /opt/elasticsearch-6.2.4/config/elasticsearch.yml
二: 安装: kibana 参考 https://www.linuxidc.com/Linux/2016-06/132616.htm
启动: sudo
service kibana start
位置 : /opt/kibana
配置⽂文件 vi /opt/kibana/config/kibana.yml
server.host: "0.0.0.0" 开放防火墙和安装组的5600端口
本机测试: curl http://127.0.0.1:5601
外网测试: http://外网ip:5601
三:生成SSL证书;
sudo vi /etc/ssl/openssl.cnf
subjectAltName = IP: 外网ip
cd /etc/pki/tls
sudo openssl req -config /etc/ssl/openssl.cnf -x509 -days 3650 -batch -nodes -newkey rsa:2048 -keyout private/logstash-forwarder.key -out certs/logstash-forwarder.crt // ⽣成公钥和私钥 ,filebeat 要访问ELK server 的时候需要再配置⽂件加上公钥.
四:安装logstash
安装位置:/opt/logstash
发送log 的配置⽂文件位置:/etc/logstash/conf.d
创建一个叫 02-beats-input.conf 的配置文件,并配置 “filebeat” 的input:
sudo vi /etc/logstash/conf.d/02-beats-input.conf
input {
beats {
port => 5044
ssl =>
true
ssl_certificate =>
"/etc/pki/tls/certs/logstash-forwarder.crt"
ssl_key =>
"/etc/pki/tls/private/logstash-forwarder.key"
}
}
保存,退出。指定的 beats 输入会监听 TCP 端口5044,它将使用我们前面创建的 SSL 证书和私钥。
现在来创建 10-syslog-filter.conf 配置文件,在这里面我们会添加 syslog 信息的 filter:
sudo vi /etc/logstash/conf.d/10-syslog-filter.conf
filter {
if
[
type
] ==
"syslog"
{
grok {
match => {
"message"
=>
"%{SYSLOGTIMESTAMP:syslog_timestamp} % {SYSLOGHOST:syslog_hostname} %{DATA:syslog_program}(?:\[%{POSINT:syslog_pid}\])?: %{GREEDYDATA:syslog_message}"
}
add_field => [
"received_at"
,
"%{@timestamp}"
]
add_field => [
"received_from"
,
"%{host}"
]
}
syslog_pri { }
date
{
match => [
"syslog_timestamp"
,
"MMM d HH:mm:ss"
,
"MMM dd HH:mm:ss"
]
}
}
}
保存,退出。这个 filter 查询 syslog 类型的 logs(通过 Filebeat),而且它会使用grok来解析传入的 syslog 日志,使之结构化和可查询。
创建 30-elasticsearch-output.conf 配置文件: sudo vi /etc/logstash/conf.d/30-elasticsearch-output.conf
output {
elasticsearch {
hosts => ["127.0.0.1:9200"]
sniffing => true
manage_template => false
index => "ads-metadata-test-%{+YYYY.MM.dd}” //用来⾃自定义index
document_type => "%{[@metadata][type]}"
}
}
保存,退出。这个 output 主要是配置 Logstash 去存储运行在 localhost:9200上的Elasticsearch beat 数据,这里有一个命名要求,由被使用的 beat 来命名(在这个情况下是filebeat)。
启动logstash : sudo
service logstash configtest 报错找不到java 路径,,在bin/logstash 和bin/logstash.lib.sh 的第一行添加java路径 export JAVA_HOME=/usr/local/lib/jdk1.8.0_191
尝试了logstash-6.5.4,logstash-5.6.10 ,logstash-2.4.0 版本,启动./bin/logstash 的时候,,服务器都很卡,,
之后莫名其妙的
sudo
service logstash configtest 就返回
Configuration OK 了
sudo service logstash restart 能启动logstash 但是 service logstash start 启动不了logstash,,奇怪了
加载的配置文件: /etc/logstash/conf.d
输出的日志: /var/log/logstash/logstash.log
logstash 安装成功后的测试可以参考: https://blog.csdn.net/chenleiking/article/details/73563930
在阿里云服务器上我安装的logstash-2.4.0 ,logstash一大缺点就是资源消耗(默认的堆大小是 1GB) 运行logstash之后,服务器就非常的卡,,参考:https://www.cnblogs.com/richaaaard/p/6109595.html ,
Filebeat 是一个轻量级的日志传输工具,它的存在正弥补了 Logstash 的缺点:Filebeat 作为一个轻量级的日志传输工具可以将日志推送到中心 Logstash。在版本 5.x 中,Elasticsearch 具有解析的能力(像 Logstash 过滤器)— Ingest。这也就意味着可以将数据直接用 Filebeat 推送到 Elasticsearch,并让 Elasticsearch 既做解析的事情,又做存储的事情。
cd
beats-dashboards-*
.
/load.sh beat 索引没有添加成功,
报错:{"error":"Content-Type header [application/x-www-form-urlencoded] is not supported","status":406}
既然我们用filebeat ,,所以beat的索引不添加,,也没问题
五: 安装Filebeat:
加载 filebeat-index-template.json 时报错: 原因是该json对于ES6.2.4来说 已经过时,
{
"error" : "Content-Type header [application/x-www-form-urlencoded] is not supported",
"status" : 406
}
参考https://stackoverflow.com/questions/50093667/filebeat-index-template-json-for-elasticsearch-6-2-4 对json格式 字段进行修改,就可以了,,另外注意 /etc/filebeat 目录下的filebeat-index-template.json 也要更新
curl -XPUT 'http://localhost:9200/_template/filebeat?pretty' -d@filebeat-index-template.json -H 'Content-Type: application/json'
最后logstash 采用2.4.1 ,但是发现与elasticsearch6.2.4 不兼容,,很坑啊,, 各种问题,,
决定采用公司服务器的elk配置,,TT 20分钟就搭建完成了,,,血的教训,,多采用公司成熟的架构,,安装软件时 多采用手动安装,避免太多的坑了.