首发链接 https://system.out.println.org/?p=1118

开始之前

假设您已经拥有一台内存至少1G的linux计算机或虚拟机并且安装了screen命令
并且您应该了解screen命令的使用 , 如果不了解您可以粗略的看一下 screen简明教程

下载安装包

java http://www.oracle.com/technetwork/java/javase/downloads/index.html
elk https://www.elastic.co/cn/products

  • 下载安装包

  • 传输到服务器中 , 如果是linux里直接下载则可以忽略这一步

    1
    2
    3
    4
    5
    scp .\jdk-8u181-linux-x64.tar.gz \
    .\kibana-6.3.2-linux-x86_64.tar.gz \
    .\logstash-6.3.2.tar.gz \
    .\elasticsearch-6.3.2.tar.gz \
    root@192.168.1.147:/opt

准备安装

接下来登陆到linux环境
ssh root@192.168.1.147

解压刚才传输的文件,并把删除原文件

1
cd /opt/ && ls | xargs -I {} tar xzvf {} && rm -f ./*.tar.gz

因为es是不能运行在root用户的 , 即使可以也不建议使用 root
因此, 我们可以单独创建一个用户来运行elk

1
useradd elk

给elk的文件目录变更用户

1
chown -R elk:elk ./*

开始安装

请自行更换 /opt 为你的实际目录

java 8

把以下几行添加到 /etc/bashrc 的末尾

1
2
3
export JAVA_HOME=/opt/jdk1.8.0_181
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

使环境变量生效

1
source /etc/bashrc

验证安装是否成功

1
java -version

此时java安装成功

elasticsearch

切换到elk用户

1
su elk

使用 screen 开始一个新会话

1
screen -S es

修改默认的配置文件

1
2
sed -i "s/#\ network.host:\ 192.168.0.1/network.host:\ 0.0.0.0/" /opt/elasticsearch-6.3.2/config/elasticsearch.yml
sed -i "s/#\ http.port/http.port/" /opt/elasticsearch-6.3.2/config/elasticsearch.yml

启动es

1
/opt/elasticsearch-6.3.2/bin/elasticsearch

如果遇到这个错误

执行命令:

1
2
3
4
su root
sysctl -w vm.max_map_count=262144
sysctl -a | grep vm.max_map_count
exit

再尝试启动 , 如果遇到这个错误

回到root账户 , 修改/etc/security/limits.conf 添加如下行并重启计算机 :

1
2
elk        hard    nofile           262144
elk soft nofile 262144

再尝试启动 , 一般会看到这个东西

此时es启动成功 , 然后我们利用curl测试一下

1
curl 127.0.0.1:9200

如果返回这个东西说明真的成功了 , 返回别的这里不讨论 , 一律视为失败 , 请参考日志进行排错

如果需要在浏览器访问, 还需要关闭防火墙和selinux

1
2
3
4
su root
systemctl stop firewalld.service
setenforce 0
exit

浏览器访问

至此es安装和启动完毕

我们用组合键回到默认会话

1
Ctrl A + d

logstash

logstash 安装和配置比较简单 , 但是需要创建一个文件

创建输入输出配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
tee /opt/logstash-6.3.2/config/logstash-io.conf <<-'EOF'
input {
file {
path => "/var/log/dev.log"
start_position => "beginning"
}
}

output {
elasticsearch {
hosts => ["192.168.1.147:9200"]
}
}
EOF

默认配置文件在 /*opt/logstash-6.3.2/config/logstash.yml 可以按需修改

尝试启动logstash

1
2
screen -S logstash
/opt/logstash-6.3.2/bin/logstash -f /opt/logstash-6.3.2/config/logstash-io.conf

如果没有error , 就启动完成了

如果需要测试是否真的启动完成 , natstat 和 telnet 这两个命令都可以

1
telnet 127.0.0.1 9600 || netstat -anp | gerp 9600

至此logstash安装和启动完毕

我们用组合键回到默认会话

1
Ctrl A + d

kibana

kibana 只需要修改基础配置文件即可启动 , 并进行浏览器测试

修改配置文件

1
2
sed -i "s/#elasticsearch.url:\ \"http:\/\/localhost:9200\"/elasticsearch.url:\ \"http:\/\/192.168.1.147:9200\"/" /opt/kibana-6.3.2-linux-x86_64/config/kibana.yml
sed -i "s/#server.host:\ \"localhost\"/server.host:\ \"192.168.1.147\"/" /opt/kibana-6.3.2-linux-x86_64/config/kibana.yml

启动

1
/opt/kibana-6.3.2-linux-x86_64/bin/kibana

返回如下信息则说明启动成功

打开浏览器 输入http://192.168.1.147:5601 可以看到如下画面

至此kibana安装和启动完毕

我们用组合键回到默认会话

1
Ctrl A + d

测试

如果顺利的到了这里 , 那么elk其实已经可以使用了 , filebeat不是必须的.
我们找来一些日志验证一下前面工作的正确性

  • 上传日志到服务器 :
    1
    scp ./dev.log root@192.168.1.147:/var/log/
  • 这是一份普通的nginx日志

  • 用screen -r回到logstash会话

  • 界面一闪而过 , 回到了这里

  • ctrl +c 停止它按上方向键 , 再启动它
  • 稍候片刻启动完成, 回到kibana

  • 在首页创建通配符索引 logstash*


  • 如果next是可点击的 , 那就到了这里

  • 选择@timestamp 继续下一步
  • 然后就开启ELK的世界了

  • 首页如下

filebeat

取得安装包

和准备工作一样 , 从官网获得filebeat的安装包并解压

修改配置

修改filebeat的配置文件 , 和上面一样我们使用sed修改配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
# 开启log输入
sed -i "s/enabled: false/enabled: true/" /opt/filebeat-6.3.2-linux-x86_64/filebeat.yml

# log存放的位置 , 位置分隔符 / 需要用 \ 转义
sed -i "s/-\ \/var\/log\/*.log/\/var\/log\/dev.log/" /opt/filebeat-6.3.2-linux-x86_64/filebeat.yml

# 关闭默认的输出到es
sed -i "s/output.elasticsearch:/# output.elasticsearch:/" /opt/filebeat-6.3.2-linux-x86_64/filebeat.yml
sed -i "s/hosts:/# hosts:/" /opt/filebeat-6.3.2-linux-x86_64/filebeat.yml

# 打开输入到logstash
sed -i "s/#output.logstash:/output.logstash:/" /opt/filebeat-6.3.2-linux-x86_64/filebeat.yml
sed -i "s/##\ hosts:/hosts:/" /opt/filebeat-6.3.2-linux-x86_64/filebeat.yml

我们还需要修改 logstash 的配置文件才能使用 filebeat 来自动捕获数据

修改logstash的输入输出配置

为了避免你已经手动修改了配置文件 , 我们不再使用sed为改为手动修改配置文件

使用你喜爱的编辑器打开 /opt/logstash-6.3.2/config/logstash-io.conf , 删除掉input代码块并在原file代码块的位置 ,增加如下内容并保存

1
2
3
beats{
port => 5044
}

最终配置文件大概会是这个样子

1
2
3
4
5
6
7
8
9
10
11
input {
beats{
port => 5044
}
}

output {
elasticsearch {
hosts => ["192.168.1.147:9200"]
}
}

重启logstash

1
2
3
screen -r logstash
^C^C^C^C....
/opt/logstash-6.3.2/bin/logstash -f /opt/logstash-6.3.2/config/logstash-io.conf

如果正常启动并进入监听状态 , 我们回到刚才的会话

1
screen -r beats

启动filebeat

1
/opt/filebeat-6.3.2-linux-x86_64/filebeat -e -c /opt/filebeat-6.3.2-linux-x86_64/filebeat.yml

如果配置正确 , 那么一般不会遇到什么问题

测试filebeat

因为我们已经在 /var/log/dev.log 这份配置文件 , 那么我们就增加它的内容 , 来测试filebeat是否正常扫描和输出到logstash

里使用死循环来增加日志内容 , 数据是重复的 , 仅可用于验证filebeat的工作
第三行的 while 是每隔1秒就复制 tmp.log 的内容到 dev.log 的末尾
您随时可以用 ^C [Ctrl +c] 来终止复制过程

1
2
3
su root
cp /var/log/dev.log /tmp/tmp.log
while true ; do cat /tmp/tmp.log >> /var/log/dev.log ; sleep 1 ; done

然后我们查看浏览器的kibana , 右上角倒数第二个按钮, 开启自动刷新并选择五秒

如果一切无误, 坐等5秒 , 就会发现有新的数据展示在页面上

此时可以明显的观察到 , 红框的时间部分每隔5秒就会变化一次

因为我们已经保证了没有 filebeat 时elk平台工作是正常的
那么如果现在elk不再正常工作了 , 就从 filebeat 大节检查和排错 ,问题最大可能是sed在你的计算机中没有生效
那么就检查配置文件开始 debug 吧
同时也欢迎您在本文章下留言说明你遇到的问题

大功告成


扩展部分

– 未完待续

x-pack

– 未完待续

ik分词

– 未完待续

elasticsearch query language

– 未完待续

使用语言级软件, 向logstash推送数据的方法

TCP

– 未完待续

UDP

– 未完待续