ELK搭建日志分析系统

记录ELK的搭建过程和遇到的问题,
所有下载链接都在官方下载地址

建议服务器配置高一些,例如2HG

ES安装

下载后上传到对应的服务器位置
解压 : tar -xzvf file.tar.gz

配置磁盘,当磁盘大于95%,就只能读取,不能写入
cluster.routing.allocation.disk.threshold_enabled: false

解压后,进入对应目录,启动,因为es不能root启动(为啥我也不知道),所以需要增加新的用户

# adduser esuser
# passwd esuser

然后输入两次密码 进行创建
然后赋予es文件夹权限,命令是 chmod -R esuser XXX(对应的文件夹,例如chmod -R esuser elasticsearch-6.5.4)

这里注意,不知道为啥,我在腾讯云设置的时候一直报错,就是chmod命令使用的问题,在阿里云的时候就没事,如果上面的命令执行有问题,可以使用 : chown -R esuser xxxx ,效果一样

切换esuser启动项目

# su esuser

在elasticsearch-6.5.4中

# bin/elasticsearch -d

-d是后台启动

然后tail -f logs/elasticsearch.log 查看启动log

遇到的坑:

1 - max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]

这是分配的虚拟内存的问题,需要设置 使用root权限

# sysctl -w vm.max_map_count=262144

查看结果:

# sysctl -a|grep vm.max_map_count

显示:

vm.max_map_count = 262144

上述方法修改之后,如果重启虚拟机将失效,所以:

解决办法:

在 /etc/sysctl.conf文件最后添加一行

# vm.max_map_count=262144

即可永久修改

2- max file descriptors [65535] for elasticsearch process is too low, increase to at least [65536]

这是文件描述的大小要求
使用

# ulimit -Hn
# ulimit -Sn

分别查看大小,具体都是啥意思不知道
如果太小,进行修改

# vim /etc/security/limits.conf

在最后面添加

* - nofile 65536 
* - memlock unlimited

*表示给所有用户起作用
然后记住,需要退出登录的用户,直接关闭窗口就行,才能生效

3 - Exception in thread “main” java.nio.file.AccessDeniedException: /usr/local/elasticsearch/elasticsearch-6.2.2-1/config/jvm.options

权限问题

# chown -R esuser xxxx

4 - 如下图

# There is insufficient memory for the Java Runtime Environment to continue.
# Native memory allocation (mmap) failed to map 986513408 bytes for committing reserved memory.
# Possible reasons:
#   The system is out of physical RAM or swap space
#   The process is running with CompressedOops enabled, and the Java Heap may be blocking the growth of the native heap
# Possible solutions:
#   Reduce memory load on the system
#   Increase physical memory or swap space
#   Check if swap backing store is full
#   Decrease Java heap size (-Xmx/-Xms)
#   Decrease number of Java threads
#   Decrease Java thread stack sizes (-Xss)
#   Set larger code cache with -XX:ReservedCodeCacheSize=
# This output file may be truncated or incomplete.
#
#  Out of Memory Error (os_linux.cpp:2749), pid=22669, tid=0x00007f7c5c3ea700

一般这个问题都是内存的问题,无非就是加大物理内存,或者设置jvm的虚拟内存,这里设置虚拟内存
es 的路径是 /usr/local/ELK/elasticsearch-6.6.1/config/jvm.options
修改里面的jvm虚拟内存

################################################################

# Xms represents the initial size of total heap space
# Xmx represents the maximum size of total heap space

-Xms512m
-Xmx512m

################################################################

因为默认是是1g,这里修改成512m

这里还是建议服务器的内存大一些,512m有时候会出现问题,内存不足的情况,es个人感觉还是挺耗内存的

5 - 外网访问

简单 修改配置,路径 : /usr/local/ELK/elasticsearch-6.6.1/config/elasticsearch.yml

# ---------------------------------- Network -----------------------------------
#
# Set the bind address to a specific IP (IPv4 or IPv6):
#
network.host: 0.0.0.0
#
# Set a custom port for HTTP:
#
#http.port: 9200
#
# For more information, consult the network module documentation.

需要重启,我知道的方式就是 kill ,再重启。

6 - elasticsearch 运行一段时间,自动关闭

给linux增加虚拟内存

[root@VM_0_12_centos java]# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/vda1        50G  5.3G   42G  12% /
devtmpfs        487M     0  487M   0% /dev
tmpfs           497M   24K  497M   1% /dev/shm
tmpfs           497M  368K  496M   1% /run
tmpfs           497M     0  497M   0% /sys/fs/cgroup
tmpfs           100M     0  100M   0% /run/user/0
[root@VM_0_12_centos java]# dd if=/dev/zero of=swapfile bs=1024000 count=2000
2000+0 records in
2000+0 records out
2048000000 bytes (2.0 GB) copied, 19.6403 s, 104 MB/s
[root@VM_0_12_centos java]# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/vda1        50G  7.2G   40G  16% /
devtmpfs        487M     0  487M   0% /dev
tmpfs           497M   24K  497M   1% /dev/shm
tmpfs           497M  368K  496M   1% /run
tmpfs           497M     0  497M   0% /sys/fs/cgroup
tmpfs           100M     0  100M   0% /run/user/0
[root@VM_0_12_centos java]# free -h
              total        used        free      shared  buff/cache   available
Mem:           992M        113M        113M        404K        765M        706M
Swap:            0B          0B          0B
[root@VM_0_12_centos java]# mkswap swapfile
Setting up swapspace version 1, size = 1999996 KiB
no label, UUID=e0fa331d-4251-4dce-ab64-500ac5b349f6
[root@VM_0_12_centos java]# swapon swapfile
swapon: /usr/local/java/swapfile: insecure permissions 0644, 0600 suggested.
[root@VM_0_12_centos java]# chmod 600 swapfile
[root@VM_0_12_centos java]# free -h
              total        used        free      shared  buff/cache   available
Mem:           992M        115M         60M        404K        816M        705M
Swap:          1.9G          0B        1.9G
[root@VM_0_12_centos java]# ps -ef|grep java

这个方法最开始成功了,但是运行了一段时间,就开始出现了问题,具体情况还在研究,还是硬件问题

Kibana安装:

简单解压,启动,如果有想要修改的查询对应配置文件
启动

nohup bin/kibana &

记得查看是否启动成功,访问对应的网址和端口号,查看页面
ELK搭建日志分析系统_第1张图片
可以修改修改,路径 /usr/local/ELK/kibana-6.6.1-linux-x86_64/config下的kibana.yml

端口号,5601 好像es会占用,不过新部署的一个就没事,具体情况还未了解,大概意思就是如果被占用耿冠端口号
server.port: 5602

可以改成外网访问

server.host: "0.0.0.0"

Logstash安装:

解压压缩文件
进入config里,复制一个配置文件

# cp ./logstash-sample.conf logstash-elk-test.conf

编辑

# vim ./logstash-elk-test.conf

input {
  tcp {
    port => 9601
    mode => "server"
    codec => json_lines
  }
}

output {
  elasticsearch {
    hosts => ["http://localhost:9200"]
    index => "applog"
    #user => "elastic"
    #password => "changeme"
  }
}

启动命令

# ./bin/logstash -f ./config/logstash-elk-test.conf

看到这个信息标识启动成功

[2019-02-02T14:26:47,366][INFO ][logstash.inputs.tcp      ] Starting tcp input listener {:address=>"0.0.0.0:9601", :ssl_enable=>"false"}
[2019-02-02T14:26:47,643][INFO ][logstash.pipeline        ] Pipeline started successfully {:pipeline_id=>"main", :thread=>"#"}
[2019-02-02T14:26:47,688][INFO ][logstash.agent           ] Pipelines running {:count=>1, :running_pipelines=>[:main], :non_running_pipelines=>[]}
[2019-02-02T14:26:47,877][INFO ][logstash.agent           ] Successfully started Logstash API endpoint {:port=>9600}

SpringBoot配置:

pom里添加logstash依赖


    net.logstash.logback
    logstash-logback-encoder
    4.11

配置logback



    
    
    
    
        xxx.xxx.xxx.xxx:9601
        
        
    
    
        
        
    

xxx.xxx.xxx.xxx,对应服务器的ip

ELK查看:

http://localhost:5601
ELK搭建日志分析系统_第2张图片

有个神器 叫 x-pack,可以了解一下,但是发现好像6.6.1已经有了monitoring,链接
需要进行配置,这个还在学习,胡乱点点倒是能出来

后期需要解决的问题

  • 多服务的日志输送到ELK里
  • 与kafka的结合
  • logstash的日志格式化,和logback的配置

这些问题解决,个人感觉才能算是一个可用的ELK日志服务

ELK搭建日志分析系统_第3张图片

你可能感兴趣的:(ELK搭建日志分析系统)