准备: Elasticsearch和logstash都依赖java环境
图例: (因为不会作图,从网上找了一张我喜欢的,但是你要先忽略Beats,就当它不存在吧)
名称/版本(版本务必一致) | 地址 |
---|---|
Elasticsearch6.3 | 链接 |
Logstash6.3 | 链接 |
Kibana6.3 | 链接 |
下载后解压以上文件到/home/elk 目录下
tar -zxvf elasticsearch-6.3.0.tar.gz
tar -zxvf logstash-6.3.0.tar.gz
tar -zxvf kibana-6.3.0-linux-x86_64.tar.gz
1.配置文件路径 : /home/elk/elasticsearch-6.3.0/config/elasticsearch.yml
2.简单配置如下:
# Set the bind address to a specific IP (IPv4 or IPv6):
network.host: 0.0.0.0 ##服务器ip
# Set a custom port for HTTP:
http.port: 8012 ##服务端口
3.启动 : /home/elk/elasticsearch-6.3.0/bin/elasticsearch -d
##本服务器加了硬盘(/data) 在/data/es 路径下有nohup.out文件, 此路径下执行 nohup /home/elk/elasticsearch-6.3.0/bin/elasticsearch > nohup.out 2>&1 & ##
4.验证启动成功:
请求http://47.99.76.xxx:8012/ 会响应一个json
{
name: "31EHmzp",
cluster_name: "elasticsearch",
cluster_uuid: "51wlJRHeRhiy8BDjlrx6Zg",
version: {
number: "6.3.0",
build_flavor: "default",
build_type: "tar",
build_hash: "424e937",
build_date: "2018-06-11T23:38:03.357887Z",
build_snapshot: false,
lucene_version: "7.3.1",
minimum_wire_compatibility_version: "5.6.0",
minimum_index_compatibility_version: "5.0.0"
},
tagline: "You Know, for Search"
}
**
启动常见错误:
原因: 方案中说是Linux对文件创建数量限制为:65535. 这与ES对文件创建数量相悖,所以需要配置.
配置文件: /etc/security/limits.conf 配置后需要系统重启(经验证,不需要重启)
* soft nofile 65536
* hard nofile 131072
* soft nproc 2048
* hard nproc 4096
问题翻译过来就是:elasticsearch用户拥有的内存权限太小,至少需要262144;
解决:
执行命令:
sysctl -w vm.max_map_count=262144
查看结果:
sysctl -a|grep vm.max_map_count
显示:
vm.max_map_count = 262144
上述方法修改之后,如果重启虚拟机将失效,所以:
解决办法:
在 /etc/sysctl.conf文件最后添加一行
vm.max_map_count=262144
看上去就像是内存不够, 现象就是每隔一段时间就挂了 . 所以: 没8g内存, 就不要吧ELK搞在一台服务器上
不过,我配置最大内存最小内存都是256m也可以启动
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190709144050203.png)
腾讯云会出现第二个问题,阿里云会出现第一个问题
**
1.配置文件路径 /home/elk/logstash-6.3.0/config/logback-es.conf
2.简单配置:
input { ##input 输入源配置
tcp { ##使用tcp输入源 官网有详细文档
port => 8013 ##服务器监听端口8013接受日志 默认ip localhost
codec => json_lines ##使用json解析日志 需要安装json解析插件
}
}
filter { ##数据处理
}
output { ##output 数据输出配置
elasticsearch { ##使用elasticsearch接收
hosts => "localhost:8012" ##集群地址 多个用,隔开
}
stdout { codec => rubydebug} ##输出到命令窗口
}
3.启动前,还需安装logstash的json插件:
/home/elk/logstash-6.3.0/bin/logstash-plugin install logstash-codec-json_lines
4.启动 : nohup /home/elk/logstash-6.3.0/bin/logstash -f /home/logstash-6.3.0/config/logback-es.conf & ##后台线程形式
问题: 这样启动,会在bin目录下生成nohup.out文件,时间久了这个文件会非常大
(注:当前elk服务器挂了1t的硬盘,路径为/data ,所以进入 /data/logstash下,执行
## nohup /home/elk/logstash-6.3.0/bin/logstash -f /home/elk/logstash-6.3.0/config/logback-es.conf > nohup.out 2>&1 & ##
将日志文件输出到 /data/logstash下的nohup.out文件中.)
(注2: 如果服务器显示磁盘满了,但是文件显然没用那么多,此时需要关闭logstash或是es,再启动就ok.原因待查,可能与logstash运行时使用inode有关)
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190723160508131.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzMxNjY4Mw==,size_16,color_FFFFFF,t_70)
1.配置文件路径 /home/elk/kibana-6.3.0-linux-x86_64/config/kibana.yml
2.配置:
server.port: 8011 ##服务端口
server.host: "0.0.0.0" ##服务器ip 本机
elasticsearch.url: "http://localhost:8012" ##elasticsearch服务地址
3.启动 : nohup ./kibana-6.3.0-linux-x86_64/bin/kibana & #后台线程启动
4.验证启动成功 :请求地址 http://47.99.76.xxx:8011
以上,ELK的服务都已经就绪,下面开始测试
net.logstash.logback
logstash-logback-encoder
4.11
2.创建logback.xml文件
47.99.76.xxx:8013
3.模拟日志
@Slf4j
@SpringBootApplication
public class ElkdemoApplication {
public static void main(String[] args) {
SpringApplication.run(ElkdemoApplication.class, args);
for (int i = 100000000; ; i++) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
}
if (i % 2 == 0) log.debug("elk log debug i={}", i);
if (i % 3 == 0) log.error("elk log error i={}", i);
log.info("elk log info i={}", i);
new LogErrorTest().syout(i);
}
}
}
@Slf4j
public class LogErrorTest {
public void syout(int i){
Runnable r = () -> log.info("LogErrorTest log in a new Thread i={}",i*10);
r.run();
log.info("LogErrorTest log i={}",i*10);
}
}
与logstash安装目录同级会创建nohup.out文件,启动测试项目后就会有日志输出,样例如下:
{
"host" => "125.121.37.56",
"@version" => 1,
"logger_name" => "mf.elkdemo.ElkdemoApplication",
"level" => "INFO",
"message" => "elk log info i=100000472",
"thread_name" => "main",
"level_value" => 20000,
"port" => 51357,
"@timestamp" => 2019-04-25T02:59:25.866Z
}
..........
此时Kibana也可以查看到日志
先选择要查看的index(Elasticsearch中index相当于关系型数据库的table)
点击上图2后,通过设置正则来配置需要筛选的index:
日志的筛选:
箭头1设置内容过滤
箭头2可实现centos中grep的功能