在上一篇 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 包,下载到本地

Linux elk部署搭建 centos7部署elk_云服务

          3. 通过xshell 上传到CentOS服务器上


rz -y


          4. 在xshell中安装rpm包(需要在上传安装包的目录下)


rpm -ivh java8安装包名称


          5. 安装完成,查看是否成功


java –version


         出现下面内容就说明java安装成功了

        

Linux elk部署搭建 centos7部署elk_Linux elk部署搭建_02


二, 安装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

            

Linux elk部署搭建 centos7部署elk_配置文件_03

            自己的服务器,可以直接设置防火墙端口


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.

             Logstash中文文档


  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:” 输入任意字符回车


        

Linux elk部署搭建 centos7部署elk_配置文件_04

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

            

Linux elk部署搭建 centos7部署elk_elasticsearch_05

在自己的主机环境下的话,可以通过防火墙命令开启端口


firewall-cmd --add-port=5601/tcp --permanent firewall-cmd –reload




四, 测试ELK部署是否 成功

      访问kibana

     

Linux elk部署搭建 centos7部署elk_Linux elk部署搭建_06

      能看到这个就说明成功了哈哈哈

      按照kibana官方教程,需要先创建索引,再根据创建的索引查询对应的数据

     

Linux elk部署搭建 centos7部署elk_云服务_07

不过我在创建索引的时候发现无法在页面上添加操作,一直报错,大概意思是“没有索引数据无法创建选择索引”,查了好久才明白,原来是需要先写一些日志进去到elasticsearch中,kibana才能去创建索引,

Linux elk部署搭建 centos7部署elk_配置文件_08

  解决办法:

通过命令的方式先写入一些日志(通过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转发的日志信息

   

Linux elk部署搭建 centos7部署elk_Linux elk部署搭建_09

    再打开kibana ,就可以配置索引了,创建完索引,打开查询面板就能看到刚才发送的日志信息了

   

Linux elk部署搭建 centos7部署elk_Linux elk部署搭建_10



以上,我们的整个ELK环境已经部署成功了!当然了,要把生产环境的日志收集到elk中还要使用Nlog,FileBeat等工具。在下一篇中我将介绍 如何配置Nlog 将日志发送到elk中,以及网红工具FileBeat。

      马上要过年了,提前祝福大家虎年行大运,代码无bug!!