在上一篇 ELK系列之理论篇 中介绍了ELK,以及Elasticsearch,Logstash,Kibana之间的相互关系,优势。大家脑海中应该有了一定的认识,接下来我将用一台全新的CentOS7系统来安装ELK环境,我将尽可能的列出详细的安装步骤,以及在安装过程中遇到的问题和处理方案,供大家学习借鉴。如果有不妥之处还请指教。
环境准备
- 腾讯云服务器
系统:Centos7 2核 4G
- Xshell7
用来连接服务器的工具,网上有绿色版,在这里我就不放连接了,相信大家都会在度娘里找到
一, 安装Java jdk
由于Logstash 仅支持java8
1. 打开Oracle 官网,https://www.oracle.com/java/technologies/downloads/
2. 找到Java8 需要的rpm 包,下载到本地
3. 通过xshell 上传到CentOS服务器上
rz -y
4. 在xshell中安装rpm包(需要在上传安装包的目录下)
rpm -ivh java8安装包名称
5. 安装完成,查看是否成功
java –version
出现下面内容就说明java安装成功了
二, 安装Elasticsearch
2.1 下载rpm安装包
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.1.0.rpm
2.2 安装rpm
rpm -ivh elasticsearch-6.1.0.rpm
查看安装目录,记住这个目录后面会经常用 (一般会安装在/usr/share/elasticsearch/)
rpm -ql elasticsearch
2.3 设置elasticsearch 数据存放的目录
# 返回根目录 cd / # 创建/data/es-data 文件夹 mkdir -p /data/es-data # 给文件夹 设置应用所有者权限 chown -R elasticsearch:elasticsearch /data/es-data
2.4 设置elasticsearch 日志log存放目录
# 返回根目录 cd / # 创建/log/es-log 文件夹 mkdir -p /log/es-log # 给文件夹 设置应用所有者权限 chown -R elasticsearch:elasticsearch /log/es-log
2.5 修改elasticsearch 的配置文件elasticsearch.yml
vi /etc/elasticsearch/elasticsearch.yml
根据下面内容进行修改,i编辑,:wq 保存
#设置data存放的路径为/data/es-data path.data: /data/es-data #设置logs日志的路径为/log/es-log path.logs: /log/es-log #设置内存不使用交换分区 bootstrap.memory_lock: false #配置了bootstrap.memory_lock为true时反而会引发9200不会被监听,原因不明 #设置允许所有ip可以连接该elasticsearch network.host: 0.0.0.0 #开启监听的端口为9200 http.port: 9200 #增加新的参数,为了让elasticsearch-head插件可以访问es (5.x版本,如果没有可以自己手动加) http.cors.enabled: true http.cors.allow-origin: "*"
2.6 systemctl 命令启动Elasticsearch 服务,并设置为开机启动
# 启动 systemctl start elasticsearch # 设置开机启动 systemctl enable elasticsearch # 查看状态 systemctl status elasticsearch
systemctl 是linux里边的系统软件管理指令,常用的功能还有 : stop 停止服务;restart 重启服务
2.7 Elasticsearch 默认的端口是9200 需要开启服务器防火墙端口9200
因为我用的是腾讯云服务器,开启端口需要登录云服务管理面板设置,防火墙里边添加tcp端口9200
自己的服务器,可以直接设置防火墙端口
firewall-cmd --add-port=9200/tcp --permanent firewall-cmd --reload
2.8 测试端口是否正常启动
* xshell 下可以用curl:
curl http:127.0.0.1:9200
* 也可以在windows 下用 telnet
# 在cmd中 输入 成功后会跳转到另外一个窗口 telnet ip 9200
三, 安装Logstash
3.1, 下载logstatsh 的rpm包
wget https://artifacts.elastic.co/downloads/logstash/logstash-6.1.0.rpm
3.2,安装
rpm -ivh logstash-6.1.0.rpm
3.3,创建logstash 的数据存放目录 和 日志log 存放目录
# 进入根目录 cd / # data存放目录 /data/ls-data mkdir -p /data/ls-data #授权目录权限给logstash chown -R logstash:logstash /data/ls-data # log 存放目录 /log/ls-log mkdir -p /log/ls-log #授权目录权限给logstash chown -R logstash:logstash /log/ls-log
3.4,修改logstash 的配置文件,设置数据文件目录 log目录
vi /etc/logstash/logstash.yml
设置如下内容
# 设置数据的存储路径为/data/ls-data path.data: /data/ls-data # 设置管道配置文件路径为/etc/logstash/conf.d path.config: /etc/logstash/conf.d # 设置日志文件的存储路径为/log/ls-log path.logs: /log/ls-log
PS:管道配置文件 很重要,logstash本质就是一个数据处理过滤转发的工具,内部实现是定义一个个管道,每个管道里边包括输入input,过滤处理filter,输出output,接收消息处理消息,输出消息给elasticsearch.
3.5,添加一个管道配置文件
在目录/etc/logstash/conf.d 下 新建一个test.conf,写入如下内容
input { tcp { port => "5044" codec => "json_lines" } } filter { grok { match => { "message" => "%{HTTPDATE:mydate}\s+%{IP:myIP}" } } mutate { # 更新字段值 字段没有则新增 replace => { "addField" => "老板真帅" } } } output { elasticsearch { hosts => "localhost:9200" index => "logstash-%{+YYYY.MM.dd}" } stdout { codec => rubydebug } # 这是将输出打印在屏幕上,可以注释掉 }
logstash在启动的时候默认会加载/etc/logstash/conf.d目录下的conf文件,管道配置文件可以有多个。
3.6,启动服务
# 启动 systemctl start logstash #设置开机启动 systemctl enable logstash #查看状态 systemctl status logstash
3.7,测试是否部署成功
# 查看安装目录 默认在/usr/share/logstash rpm -ql logstash # 在系统命令目录下创建一个 logstash的软连接 ln -s /usr/share/logstash/bin/logstash /bin/ #测试 logstash logstash -e 'input { stdin {} } output { stdout {} }'
一两秒钟后等出现“waiting for input:” 输入任意字符回车
PS:上面的命令 就是接收输入stdin 并且不做处理直接输出原信息到控制台 stdout)
可以同时按 Ctrl+C 退出当前测试 到主机环境
三, 安装Kibana
3.1, 下载kibana 的rpm包
wget https://artifacts.elastic.co/downloads/kibana/kibana-6.1.0-x86_64.rpm
3.2,安装
rpm -ivh kibana-6.1.0-x86_64.rpm
3.3,修改配置文件
# kibana 默认安装在 /usr/share/kibana # 配置文件默认放在 /etc/kibana/ vi /etc/kibana/kibana.yml
- 修改端口号为 5601
- 允许所有ip可访问 0.0.0.0
- 配置连接的elasticsearch地址 http://localhost:9200
- 配置索引名称 .kibana
server.port: 5601 server.host: "0.0.0.0" elasticsearch.url: "http://localhost:9200" kibana.index: ".kibana"
3.4,启动服务
systemctl start kibana systemctl enable kibana
通过命令查看kibana运行状态 systemctl status kibana
3.5,开启端口5601
云服务器登录控制台,添加tcp 端口 5601
在自己的主机环境下的话,可以通过防火墙命令开启端口
firewall-cmd --add-port=5601/tcp --permanent firewall-cmd –reload
四, 测试ELK部署是否 成功
访问kibana
能看到这个就说明成功了哈哈哈
按照kibana官方教程,需要先创建索引,再根据创建的索引查询对应的数据
不过我在创建索引的时候发现无法在页面上添加操作,一直报错,大概意思是“没有索引数据无法创建选择索引”,查了好久才明白,原来是需要先写一些日志进去到elasticsearch中,kibana才能去创建索引,
解决办法:
通过命令的方式先写入一些日志(通过logstash 接受控制台输入,并发送输入信息到elasticsearch,elasticsearch连接地址为 localhost:9200)
logstash -e 'input { stdin { } } output { elasticsearch { hosts => ["localhost:9200"] } stdout { codec => rubydebug }}'
等待控制台上出现“The stdin plugin is now waiting for input”时输入 hello ,下面会跳出logstash转发的日志信息
再打开kibana ,就可以配置索引了,创建完索引,打开查询面板就能看到刚才发送的日志信息了
以上,我们的整个ELK环境已经部署成功了!当然了,要把生产环境的日志收集到elk中还要使用Nlog,FileBeat等工具。在下一篇中我将介绍 如何配置Nlog 将日志发送到elk中,以及网红工具FileBeat。
马上要过年了,提前祝福大家虎年行大运,代码无bug!!