ELK+filebeat+kafka部署 (1)ELK部署

目录

1.主机规划

2.环境配置

1.软件版本

2.时间同步

3.ELK部署(cong11)

1)上传软件包

 2)安装jdk1.8

解压jdk:

 配置 jdk 环境变量

查看 java 环境变量

3.安装Elasticsearch

解压软件包

创建用户

给文件授权

设置内核参数

设置资源参数 

切换到elk用户

 Elasticsearch主配置文件

启动Elasticsearch

后台启动 

查看端口:

查看进程

Elasticsearch测试

 加入开启自启

测试脚本

4.安装logstash 

 解压安装包

生成配置文件

做软连接

启动logstash 

后台启动

开启自启

5.安装Kibana

解压软件包

修改配置文件

启动服务

添加开机自启

测试

6.Kibana测试 

创建一个索引

 选择时间过滤器

索引参数配置

 查看收集来的日志

使用时间过滤器查看日志 


1.主机规划

主机名IP部署软件备注
cong11192.168.30.11ELK 7.3ELK软件版本要一致
cong12192.168.30.12http+filebeat使用filebeat收集日志
cong13192.168.30.13Kafka+zookeeper这里部署单节点

2.环境配置

1.软件版本

这里使用7.3.0版本,ELK所有的组件最好选择相同的版本

2.时间同步

所有节点都需要进行时间同步,确保时间一致

[root@cong11 ~]# ntpdate ntp1.aliyun.com
[root@cong12 ~]# ntpdate ntp1.aliyun.com
[root@cong13 ~]# ntpdate ntp1.aliyun.com

注:ntpdate命令由ntpdate软件包提供,若未安装,请安装该软件包。

防火墙和selinux关闭

确保时间同步可可以设置个计划任务

crontab -e
*/30 * * * * ntpdate ntp1.aliyun.com

3.ELK部署(cong11)

我们这里把ELK环境搭建好

官网:Elastic 产品:搜索、分析、日志和安全 | Elastic

1)上传软件包

 2)安装jdk1.8

 由于ELK 的3个软件都需要JDK支持,所以只要安装Elasticsearch + Logstash + Kibana的服务器都要装JDK,jdk版本至少1.8

解压jdk:

 tar -zxvf jdk-8u171-linux-x64.tar.gz -C /usr/local/

 配置 jdk 环境变量

[root@cong11 ~]# vim /etc/profile
JAVA_HOME=/usr/local/jdk1.8.0_171 
PATH=$JAVA_HOME/bin:$PATH
CLASSPATH=$JAVA_HOME/jre/lib/ext:$JAVA_HOME/lib/tools.jar 
export PATH JAVA_HOME CLASSPATH
 source /etc/profile #使环境变量生效

查看 java 环境变量

[root@cong11 ~]#  java -version
java version "1.8.0_171"
Java(TM) SE Runtime Environment (build 1.8.0_171-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.171-b11, mixed mode)

3.安装Elasticsearch

我们这里开始安装Elasticsearch,这里做实验配置用的是Elasticsearch单节点部署,生产环境中应该部署Elasticsearch集群,保证高可用

解压软件包

tar -zxvf elasticsearch-7.3.0-linux-x86_64.tar.gz -C /usr/local/

创建用户

源码包安装Elasticsearch不能用root启动,需要新建一个用户来启动ElasticSearch,这里创建普通用户elk

useradd elk

给文件授权

chown -R elk:elk /usr/local/elasticsearch-7.3.0/

设置内核参数

修改系统参数,确保系统有足够资源启动ES       

vim /etc/sysctl.conf
vm.max_map_count=655360

是内核配置生效:

 sysctl -p

vm.max_map_count = 655360

注:

vm.max_map_count这个参数就是允许一个进程在VMA(Virtual Memory Areas,虚拟内存区域)拥有最大数量,虚拟内存区域是一个连续的虚拟地址空间区域,在进程的生命周期中,每当程序尝试在内存中映射文件,链接到共享内存段,或者分配堆空间的时候,这些区域将被创建。调优这个值将限制进程可拥有VMA的数量,当达到vm.max_map_count了就是返回out of memory errors

这个数据通过下面的命令可以查看: cat /proc/sys/vm/max_map_count

可以通过命令cat /proc/{pids}/maps |wc -l来监控,当前进程使用到的vm映射量

设置资源参数 

vim /etc/security/limits.conf

设置用户打开文件数的硬限制,软限制

* soft nofile 65536
* hard nofile 65536

设置用户可以打开最大进程数的软硬限制

* soft nproc 65536
* hard nproc 65536

切换到elk用户

使用普通用户去启动elasticsearch,这是软件强制规定的

su - elk

进到解压目录下

[elk@cong11 ~]$ cd /usr/local/elasticsearch-7.3.0/

 Elasticsearch主配置文件

如果是集群修改如下配置,集群式通过cluster.name自动在9300端口上寻找节点信息的

9300是集群内部通信的端口

cluster.name: my-application   #集群名称,同一个集群的标识
node.name: node-1          #节点名称

path.data: /data/elk/data    #数据存储位置
path.logs: /data/elk/logs     #日志文件的路径
bootstrap.memory_lock: false  #内存锁定
bootstrap.system_call_filter: false

#如果系统为centos6.x操作系统,不支持SecComp,而elasticsearch默认bootstrap.system_call_filter为true进行检测,所以导致检测失败,失败后直接导致ES不能启动。
# 解决办法:在elasticsearch.yml中添加配置项:bootstrap.system_call_filter为false

network.host: 0.0.0.0   # ES的监听地址,这样别的机器也可以访问
http.port: 9200     #监听端口,ES节点和外部通讯使用,默认的端口号是9200。
cluster.initial_master_nodes: ["node-1"]  #设置一系列符合主节点条件的节点的主机名或IP地址来引导启动集群

[elk@cong11 elasticsearch-7.3.0]$ vim config/elasticsearch.yml
cluster.name: my-application
node.name: cong11
path.data: /data/elk/data
path.logs: /data/elk/logs
bootstrap.memory_lock: false
bootstrap.system_call_filter: false
network.host: 0.0.0.0
http.port: 9200
cluster.initial_master_nodes: ["cong11"]

 退出 elk 用户,创建数据和日志目录

[elk@cong11 elasticsearch-7.3.0]$ exit
登出
[root@cong11 ~]# mkdir -p /data/elk/{data,logs}
 chown -R elk:elk /data/elk/  #数组属组改为elk用户
su - elk
cd /usr/local/elasticsearch-7.3.0/

修改 jvm的内存分配 ,默认是1g,官方建议对jvm进行一些修改,不然很容易出现OOM,参考官网改参数配置,最好不要超过内存的50%

vim config/jvm.options
-Xms1g
-Xmx1g

启动Elasticsearch

前台运行查看启动过程状态

cd /usr/local/elasticsearch-7.3.0/
./bin/elasticsearch

后台启动 

注:ES 启动一定是创建的 elk 普通用户启动

 [elk@cong11 elasticsearch-7.3.0]$ nohup /usr/local/elasticsearch-7.3.0/bin/elasticsearch  &
或者
/usr/local/elasticsearch-7.3.0/bin/elasticsearch -d

查看端口:

确认elasticsearch的9200端口已监听,说明elasticsearch已成功运行

netstat -anptl | grep java
或
netstat -anptl | grep 9200

查看进程

 jps -m

 或

ps -ef | grep elasticsearch

 注:

单个节点可以作为一个运行中的 Elasticsearch的实例,而是一个集群是一组拥有相同cluster.name的节点,(单独的节点也可以组成一个集群)可以在elasticsearch.yml配置文件中修改cluster.name,该节点启动时加载(需要重启服务后才会生效)

Elasticsearch测试

http://192.168.30.11:9200/

 或者

curl http://192.168.30.11:9200/

 加入开启自启

编写一个启动脚本

su - root  #切换到root配置
vim /etc/init.d/elasticsearch
#!/bin/sh
#chkconfig: 2345 80 05
#description: elasticsearch

export JAVA_BIN=/usr/local/jdk1.8.0_171/bin
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export JAVA_HOME JAVA_BIN PATH CLASSPATH
case "$1" in
start)
    su elk<<!
    cd /usr/local/elasticsearch-7.3.0/
    ./bin/elasticsearch -d
!
    echo "elasticsearch startup"
    ;;
stop)
    es_pid=`jps | grep Elasticsearch | awk '{print $1}'`
    kill -9 $es_pid
    echo "elasticsearch stopped"
    ;;
restart)
    es_pid=`jps | grep Elasticsearch | awk '{print $1}'`
    kill -9 $es_pid
    echo "elasticsearch stopped"
    su elk<<!
    cd /usr/local/elasticsearch-7.3.0/
    ./bin/elasticsearch -d
!
    echo "elasticsearch startup"
    ;;
*)
    echo "start|stop|restart"
    ;;
esac

exit $?

su elk<<! 切换为elk用户执行下面的命令,<<! 相当于<<EOF

注意:

以上脚本的用户为elk,如果你的用户不是,则需要替换

以上脚本的JAVA_BIN以及elasticsearch_home如果不同请替换

给脚本添加权限,添加开机自启

chmod +x /etc/init.d/elasticsearch 
 chkconfig --add /etc/init.d/elasticsearch 

测试脚本

systemctl restart elasticsearch
 ps -aux | grep elasticsearch

4.安装logstash 

 解压安装包

下载并安装Logstash,安装logstash只需将它解压的对应目录即可,例如:/usr/local下:

tar -zxvf logstash-7.3.0.tar.gz -C /usr/local/

Logstash管道有两个必需的元素,input和output,以及一个可选的元素,filter。输入插件从数据源那里消费数据,过滤器插件根据你的期望修改数据,输出插件将数据写入目的地。

首先,我们通过运行最基本的Logstash管道来测试Logstash安装

/usr/local/logstash-7.3.0/bin/logstash -e 'input {stdin{}} output {stdout{}}'

 Thread.exclusive is deprecated, use Thread::Mutex
Sending Logstash logs to /usr/local/logstash-7.3.0/logs which is now configured via log4j2.properties
[2022-06-15T17:33:06,537][INFO ][logstash.setting.writabledirectory] Creating directory {:setting=>"path.queue", :path=>"/usr/local/logstash-7.3.0/data/queue"}
[2022-06-15T17:33:06,553][INFO ][logstash.setting.writabledirectory] Creating directory {:setting=>"path.dead_letter_queue", :path=>"/usr/local/logstash-7.3.0/data/dead_letter_queue"}
[2022-06-15T17:33:06,803][WARN ][logstash.config.source.multilocal] Ignoring the 'pipelines.yml' file because modules or command line options are specified
[2022-06-15T17:33:06,812][INFO ][logstash.runner          ] Starting Logstash {"logstash.version"=>"7.3.0"}
[2022-06-15T17:33:06,836][INFO ][logstash.agent           ] No persistent UUID file found. Generating new UUID {:uuid=>"60035eff-d053-481c-9f9b-152f3466bd03", :path=>"/usr/local/logstash-7.3.0/data/uuid"}
[2022-06-15T17:33:07,990][INFO ][org.reflections.Reflections] Reflections took 28 ms to scan 1 urls, producing 19 keys and 39 values 
[2022-06-15T17:33:08,885][WARN ][org.logstash.instrument.metrics.gauge.LazyDelegatingGauge] A gauge metric of an unknown type (org.jruby.RubyArray) has been create for key: cluster_uuids. This may result in invalid serialization.  It is recommended to log an issue to the responsible developer/development team.
[2022-06-15T17:33:08,887][INFO ][logstash.javapipeline    ] Starting pipeline {:pipeline_id=>"main", "pipeline.workers"=>4, "pipeline.batch.size"=>125, "pipeline.batch.delay"=>50, "pipeline.max_inflight"=>500, :thread=>"#<Thread:0x4a25ae0e run>"}
[2022-06-15T17:33:08,949][INFO ][logstash.javapipeline    ] Pipeline started {"pipeline.id"=>"main"}
The stdin plugin is now waiting for input:
[2022-06-15T17:33:09,031][INFO ][logstash.agent           ] Pipelines running {:count=>1, :running_pipelines=>[:main], :non_running_pipelines=>[]}
[2022-06-15T17:33:09,304][INFO ][logstash.agent           ] Successfully started Logstash API endpoint {:port=>9600}
hello world     #通过键盘输入的内容
/usr/local/logstash-7.3.0/vendor/bundle/jruby/2.5.0/gems/awesome_print-1.7.0/lib/awesome_print/formatters/base_formatter.rb:31: warning: constant ::Fixnum is deprecated
{
    "@timestamp" => 2022-06-15T09:35:15.482Z,
      "@version" => "1",
          "host" => "cong11",
       "message" => "hello world"
}

注: stdin 标准输入,stdout标准输出

,logstash按照某种格式输出,其中-e参数允许Logstash直接通过命令行接受设置。这点尤其快速的帮助我们反复的测试配置是否正确而不用写配置文件。使用CTRL-C命令可以退出之前运行的Logstash

生成配置文件

vim /usr/local/logstash-7.3.0/config/logstash.conf
input {
  file {
        path => "/var/log/messages"
        type => "messages_log"
        start_position => "beginning"
  }
}
filter {
}
output {
     elasticsearch {
      hosts => ["192.168.30.11:9200"]
      index => "var-massages-%{+yyyy.MM.dd}"
      }
     stdout { codec => rubydebug }
}

注:上述文件复制时必须除去多余空格 保持yml文件规范。这个配置文件只是简单测试logstash收集日志功能

input {                  #input plugin让logstash可以读取特定的事件源。
  file {   #file 从文件读取数据
        path => "/var/log/messages"   #收集来源,这里从输入的文件路径收集系统日志。可以用/var/log/*.log,/var/log/**/*.log,如果是/var/log则是/var/log/*.log。
        type => "messages_log"   #通用选项. 用于激活过滤器。
        start_position => "end"   #start_position 选择logstash开始读取文件的位置,begining或者end。默认是end,end从文件的末尾开始读取,也就是说,仅仅读取新添加的内容。对于一些更新的日志类型的监听,通常直接使用end就可以了;相反,beginning就会从一个文件的头开始读取。但是如果记录过文件的读取信息,这个配置也就失去作用了。
  } 
}
filter {     #过滤器插件,对事件执行中间处理、过滤,为空不过滤。
}
output {   #输出插件,将事件发送到特定目标。
     elasticsearch {   #将事件发送到es,在es中存储日志
      hosts => ["192.168.30.11:9200"]
      index => "var-massages-%{+yyyy.MM.dd}"  #index表示事件写入的索引。可以按照日志来创建索引,以便于删旧数据和按时间来搜索日志
      }
     stdout { codec => rubydebug }      # stdout标准输出,输出到当前终端显示屏,此选项为了测试可省略
}

 还有很多的input/filter/output插件类型,可以参考官方文档来配置

 https://www.elastic.co/guide/en/logstash/current/index.html

做软连接

ln -s /usr/local/logstash-7.3.0/bin/* /usr/local/bin/

启动logstash 

logstash -f /usr/local/logstash-7.3.0/config/logstash.conf

  使用echo命令模拟写入日志,另外打开一个终端,执行下面的命令。

 echo "$(date) hello world" >> /var/log/messages

 可以使用curl命令发送请求来查看ES是否接收到了数据:

curl http://192.168.30.11:9200/_search?pretty

常用启动参数:

 -e:立即执行,使用命令行里的配置参数启动实例

例如 logstash -e 'input {stdin{}} output {stdout{}}‘

-f:指定启动实例的配置文件

例如logstash -f /usr/local/logstash-7.3.0/config/logstash.conf

-t:测试配置文件的正确性

 例如logstash -f /usr/local/logstash-7.3.0/config/logstash.conf -t

后台启动

nohup logstash -f /usr/local/logstash-7.3.0/config/logstash.conf &

开启自启

让开机加载jjava 环境

echo "source /etc/profile" >> /etc/rc.local
echo "nohup logstash -f /usr/local/logstash-7.3.0/config/logstash.conf &" >> /etc/rc.local
chmod +x /etc/rc.local 

5.安装Kibana

解压软件包

下载kibana后,解压到对应的目录就完成kibana的安装

 tar -zxvf kibana-7.3.0-linux-x86_64.tar.gz -C /usr/local/

修改配置文件

vim /usr/local/kibana-7.3.0-linux-x86_64/config/kibana.yml

#开启以下选项并修改

server.port: 5601
server.host: "192.168.1.11"
elasticsearch.hosts: ["http://192.168.1.11:9200"]  #修改elasticsearch地址,多个服务器请用逗号隔开

注意:host:与IP地址中间有个空格不能删除,否则报错

启动服务

/usr/local/kibana-7.3.0-linux-x86_64/bin/kibana

Kibana should not be run as root.  Use --allow-root to continue.   这个报错是限制root用户运行,如想用root账户运行 使用 --allow-root 。

 /usr/local/kibana-7.3.0-linux-x86_64/bin/kibana --allow-root

 kibana 设置后台启动,使用nohup 配合

nohup /usr/local/kibana-7.3.0-linux-x86_64/bin/kibana --allow-root &

添加开机自启

 echo "nohup /usr/local/kibana-7.3.0-linux-x86_64/bin/kibana --allow-root &" >> /etc/rc.local

测试

访问kibana

6.Kibana测试 

创建一个索引

登录后,首先,配置一个索引,打开发现,可以在仪表盘上看到我们在建logstash上创建的索引,添加索引,创建就可以

 选择时间过滤器

 

索引参数配置

 看到如下界面说明索引创建完成。使用默认就可以

 查看收集来的日志

点击 “discover”,可以搜索和浏览  Elasticsearch中的数据

使用时间过滤器查看日志 

 默认搜索最近15分钟的数据,可以自定义选择时间

 到此,说明你的ELK平台安装部署完成。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蟹黄堡!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值