环境
centos7.5
下载
官网下载Elasticsearch、Logstash、Kibana
Free and Open Search: The Creators of Elasticsearch, ELK & Kibana | Elastic
我下载的都是7.1.1版本,最好统一版本
(注意,这几个都是试用版,过一段时间会过期,如果需要长期使用,得下载oss版本)
点击产品下面的下载按钮(有的在“在ElasticCloud上启用下面”),进入下载页面,再点击
The pure Apache 2.0 licensed distribution is available here.
这行内容的here,跳转到OSS版本下载地址,点击downloads段落的LINUX,下载linux版本。
可以点击Not the version you're looking for? View past releases.这行的past releases找到历史版本。
或者直接进入到历史版本下载页面
https://www.elastic.co/downloads/past-releases Products产品依次选择ElasticSearch OSS、Logstash OSS、Kibana OSS,Versions版本选择特定的版本。
点击下载后进入系统选择页面,选择LINUX的进行下载即可。
关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
安装elasticsearch
在 Linux 环境中,elasticsearch 不允许以 root 权限来运行。
如果以 root 身份运行 elasticsearch,会提示这样的错误:
can not run elasticsearch as root
解决方法:使用非 root 权限账号运行 elasticsearch
# 创建用户组
groupadd elk
# 创建新用户,-g elk 设置其用户组为 elk,-p elk 设置其密码为 elk
useradd elk -g elk -p elk
# 更改 /opt 文件夹及内部文件的所属用户及组为 elk:elk
chown -R elk:elk /opt # 假设你的 elasticsearch 安装在 opt 目录下
# 切换账号
su elk
解压elasticsearch
tar xzvf elasticsearch-7.1.1-linux-x86_64.tar.gz
运行
cd elasticsearch-7.1.1
bin/elasticsearch
测试
curl http://localhost:9200
默认只能用localhost访问,如需开启外部访问,需修改配置
vi config/elasticsearch.yml
去掉network.host的注释并修改为本机ip
network.host: 0.0.0.0
discovery.seed_hosts: ["127.0.0.1","[::1]"]
此时启动可能会报错
ERROR: [3] bootstrap checks failed
[1]: max file descriptors [4096] for elasticsearch process is too low, increase to at least [65535]
[2]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
如果不配置discovery.seed_hosts会报错
[3]: the default discovery settings are unsuitable for production use; at least one of [discovery.seed_hosts, discovery.seed_providers, cluster.initial_master_nodes] must be configured
vm.max_map_count 不低于 262144
问题:vm.max_map_count 表示虚拟内存大小,它是一个内核参数。elasticsearch 默认要求 vm.max_map_count 不低于 262144。
max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
解决方法:
你可以执行以下命令,设置 vm.max_map_count ,但是重启后又会恢复为原值。
sysctl -w vm.max_map_count=262144
持久性的做法是在 /etc/sysctl.conf 文件中修改 vm.max_map_count 参数:
echo "vm.max_map_count=262144" > /etc/sysctl.conf sysctl -p
nofile 不低于 65536
问题: nofile 表示进程允许打开的最大文件数。elasticsearch 进程要求可以打开的最大文件数不低于 65536。
解决方法:
echo "* soft nofile 65536" > /etc/security/limits.conf
echo "* hard nofile 131072" > /etc/security/limits.conf
reboot重启后即可正常启动
后台启动
nohup bin/elasticsearch > service.out&
跟踪后台启动的输出
tail -f service.out
看进程
[elk@localhost xx]$ ps -ef|grep opt
elk 2095 1750 11 13:42 pts/0 00:02:51 /opt/elasticsearch-7.1.1/jdk/bin/java -Xms1g -Xmx1g -XX:+UseConc……/opt/elasticsearch-7.1.1/lib/* org.elasticsearch.bootstrap.Elasticsearch
elk 2183 2095 0 13:42 pts/0 00:00:00 /opt/elasticsearch-7.1.1/modules/x-pack-ml/platform/linux-x86_64/bin/controller
Logstash
解压
tar xzvf logstash-7.1.1.tar.gz
运行
cd logstash-7.1.1
bin/logstash -f config/logstash-sample.conf
或后台启动
nohup bin/logstash -f config/logstash-sample.conf > service.out&
如果没有JAVA_HOME,需设置JAVA_HOME,注意使用root用户
vi /etc/profile
添加如下内容
export JAVA_HOME=/opt/elasticsearch-7.1.1/jdk
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin
配置立即生效执行
source /etc/profile
看进程
$ ps -ef|grep opt
elk 2460 2317 68 14:01 pts/1 00:03:37 /opt/elasticsearch-7.1.1/jdk/bin/java ……/opt/logstash-7.1.1/logstash-core/lib/jars/slf4j-api-1.7.25.jar org.logstash.Logstash -f config/logstash-sample.conf
Kibana
解压
tar xzvf kibana-7.1.1-linux-x86_64.tar.gz
cd kibana-7.1.1-linux-x86_64
需要修改elasticsearch的ip端口则改一下配置
vi config/kibana.yml
去掉这两行的注释并修改
server.host: "192.168.91.149" #需修改才能从其他机器访问
elasticsearch.hosts: ["http://localhost:9200"]
运行
bin/kibana
或后台启动
nohup bin/kibana > service.out&
访问地址
http://localhost:5601
看进程
[elk@localhost kibana-7.1.1-linux-x86_64]$ ps -ef |grep node
elk 2658 1750 99 14:09 pts/0 00:00:12 bin/../node/bin/node --no-warnings --max-http-header-size=65536 bin/../src/cli
Java日志输出到Logstash
cd logstash-7.1.1
vi config/logstash.conf
添加如下内容
input {
beats {
port => 5044
}
tcp {
# host:port就是上面appender中的 destination,
# 这里其实把logstash作为服务,开启9250端口接收logback发出的消息
host => "0.0.0.0" port => 9250 mode => "server" tags => ["tags"] codec => json_lines
}
}
output {
elasticsearch {
hosts => ["http://localhost:9200"]
}
}
kill掉原来的logstash后启动
nohup bin/logstash -f config/logstash.conf > service.out&
Java代码修改
pom.xml增加依赖
<dependency>
<groupId>net.logstash.logback</groupId>
<artifactId>logstash-logback-encoder</artifactId>
<version>6.1</version>
</dependency>
logback.xml按需调整
<appender name="LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
<!--
destination 是 logstash 服务的 host:port,
相当于和 logstash 建立了管道,将日志数据定向传输到 logstash
-->
<destination>192.168.91.149:9250</destination>
<encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder"/>
</appender>
<root level="INFO">
<!-- appender referenced after it is defined -->
<appender-ref ref="STDOUT"/>
<appender-ref ref="LOGSTASH" />
</root>
此时启动java程序,如果启动成功,日志就进入es了
日志查看
进入kibana web页面
点击左侧Discover按钮,会自动进入创建索引,创建索引logstash-*
点击下一步Next step
Time Filter field name选择@timestamp,点击Create index pattern按钮等待创建索引成功
此时再次点击左侧Discover按钮,进入熟悉的索引查询页面了
区分应用
实际应用过程中,多个app日志混在一起,需要增加额外入库字段进行区分,此时修改java程序的logback.xml,添加customFields配置节即可。
<appender name="LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
<!--
destination 是 logstash 服务的 host:port,
相当于和 logstash 建立了管道,将日志数据定向传输到 logstash
-->
<destination>192.168.91.149:9250</destination>
<encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder">
<customFields>{"appname":"whqtest"}</customFields>
</encoder>
</appender>
logback.xml也可以采用变量的写法
<configuration>
<!-- 项目的appid -->
<property name="APP_ID" value="whqtest"/>
………………
<appender name="LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
<!--
destination 是 logstash 服务的 host:port,
相当于和 logstash 建立了管道,将日志数据定向传输到 logstash
-->
<destination>192.168.91.149:9250</destination>
<encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder">
<customFields>{"appname":"${APP_ID}"}</customFields>
</encoder>
</appender>
………………
</configuration>
OSS版本
一段时间后启动kibana报错
Elasticsearch cluster did not respond with license information.
需要下载oss版本
https://www.elastic.co/cn/downloads/elasticsearch-oss
Download Logstash Free | Get Started Now | Elastic
https://www.elastic.co/cn/downloads/kibana-oss
OSS版部署问题
如果连接es超时
vi es的目录/config/jvm.options
增大-Xms和-Xmx到2g
增大es连接超时时间
vi config/kibana.yml
elasticsearch.requestTimeout: 90000
连接es返回错误:master_not_discovered_exception
es服务器修改
vi /etc/hostname 设置机器名为node1
node1
vi /etc/hosts
127.0.0.1 node1
vi es目录/config/elasticsearch.yml
node.name: node1
discovery.seed_hosts: ["127.0.0.1"]
cluster.initial_master_nodes: ["node1"]