elk日志分析管理系统的搭建(非集群非docker安装)

elk日志分析管理系统的搭建

日志收集的主要流程

  • 1.使用logback或者使用filebeat将生成的日志发送给logstash
  • 2.logstash对日志进行采集之后,推送给elasticsearch
  • 3.Elasticsearch存储Logstash传送的结构化数据,提供给Kibana
  • 4.Kibana提供UI页面进行数据展示和分析形成图表等

elk日志分析管理系统的搭建(非集群非docker安装)

使用的软件版本

Elasticsearch 6.3.0

Kibana 6.3.0

Logstash 6.3.0

filebeat 6.3.0

要保证所有用到的软件包版本一致,7以上的版本需要jdk11以上

搭建elk日志系统

非集群式,一台机器上搭建elk,接收其它机器上的日志

安装Elasticsearch

安装可以选择yum安装,也可以选择用npm,这里用压缩包安装

解压

tar -zxvf elasticsearch-6.3.0.tar.gz

修改配置文件

vim elasticsearch-6.3.0/config/elasticsearch.yml

将以下注解的注释去掉

network.host: 0.0.0.0 #设置任意ip的机器都可以访问
http.port: 9200 #设置端口

可以添加以下配置

http.cors.enabled: true #允许跨域
http.cors.allow-origin: "*"

启动elasticsearch

elasticsearch-6.3.0/bin/elasticsearch -d #后台启动

如果发现启动不成功,查看日志

tail -100f elasticsearch-6.3.0/logs/elasticsearch.log

如果出现

java.lang.RuntimeException: can not run elasticsearch as root

表示elasticsearch无法通过root用户启动,那创建一个新的用户来启动

1.新建用户elk
useradd elk 
2.给elk赋权
修改文件去掉头部#
vi /etc/sudoers 
## Allows people in group wheel to run all commands
%wheel    ALL=(ALL)    ALL
3.然后修改用户,使其属于root组
usermod -g root elk
4切换用户elk
su elk

创建完后重新启动,发现还有错误
elk日志分析管理系统的搭建(非集群非docker安装)

解决报错问题

(1) max number of threads [1024] for user [elk] is too low, increase to at least [4096]
切换到root用户,进入limits.d目录下修改配置文件。

su root
vim /etc/security/limits.d/90-nproc.conf

修改如下内容:

soft nproc 1024

修改为
soft nproc 4096

(2) max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]

修改配置sysctl.conf

vim /etc/sysctl.conf

添加下面配置:
vm.max_map_count=262144
并执行命令,使修改生效

sysctl -p

如果出现[3]: system call filters failed to install; check the logs and fix your configuration or disable system call filters at your own risk

修改elasticsearch.yml 底部增加两行参数

vim /root/elk/elasticsearch-6.3.0/config/elasticsearch.yml

bootstrap.memory_lock: false
bootstrap.system_call_filter: false

再次启动elasticsearch

如果出现started则说明启动成功

访问9200端口测试是否成功启动

运行

curl "http://localhost:9200"

如果出现以下字段,则说明成功

elk日志分析管理系统的搭建(非集群非docker安装)

安装Logstash

解压

tar -zxvf logstash-6.3.0.tar.gz

修改配置文件

vim logstash-6.3.0/config/logstash.yml

修改或添加

http.host: "0.0.0.0" #设置任意ip机器可以访问
http.port: 9600		#设置端口

启动logstash

nohup logstash-6.3.0/bin/logstash & #后台运行

如果报错,查看日志

tail  logstash-6.3.0/logs/logstash-plain.log

验证是否启动

访问9600 端口

curl "http://localhost:9600"

如果出现以下字段则说明成功

elk日志分析管理系统的搭建(非集群非docker安装)

安装Kibana

解压

tar -zxvf kibana-6.3.0-linux-x86_64.tar.gz

修改配置文件

vim kibana-6.3.0-linux-x86_64/config/kibana.yml

去掉注解或者增加

server.port: 5601       #kibana界面访问端口
server.host: "0.0.0.0"  #任意ip的机器可以访问
elasticsearch.url: "http://localhost:9200" #对接的es端口

启动kibana

nohup /root/elk/kibana-6.3.0-linux-x86_64/bin/kibana & #后台启动 

访问5601端口,查看初始化的kibana页面

elk日志分析管理系统的搭建(非集群非docker安装)

接收项目的日志

现在elk搭建完毕,要从其它机器的本地接收日志

通过filebeat发送日志

filebeat读取日志,输出到logstash,经过logstash解析后,输出到 elasticsearch,最后由kibana展示。这种方式无需修改项目的配置和代码。

在需要发送日志的机器上安装filebeat

解压
tar -zxvf filebeat-6.3.0-linux-x86_64
修改配置文件
vim filebeat-6.3.0-linux-x86_64/filebeat.yml

进行如下配置

# filebeat 输入标识
filebeat.inputs:

# Each - is an input. Most options can be set at the input level, so
# you can use different inputs for various configurations.
# Below are the input specific configurations.
# 定义输入类型,为日志类型
- type: log
  # Change to true to enable this input configuration.
  # 开启配置
  enabled: true

  # Paths that should be crawled and fetched. Glob based paths.
  # 读取日志文件路径,支持多个路径
  paths:
	#表示发送data/logs下所有拓展名为log的日志文件
    - /data/logs/*.log 
  # 增加自定义字段
  fields:
     appname: appliction
 #可以定义多个输入标识   
- type: log
  enabled: true
  paths:
    - /usr/local/logs/info.log
  fields:
      log_name: test-dev

  # Exclude lines. A list of regular expressions to match. It drops the lines that are
  # matching any regular expression from the list.
  #exclude_lines: ['^DBG']

配置filebeat将日志发送到logstash

注释 output  elasticsearch 
#output.elasticsearch:
  # Array of hosts to connect to.
	#  hosts: ["localhost:9200"]

  # Protocol - either `http` (default) or `https`.
  #protocol: "https"

  # Authentication credentials - either API key or username/password.
  #api_key: "id:api_key"
  #username: "elastic"
  #password: "changeme"
  
  #----------------------------- Logstash output ------------------------------
#开启输出到logstash的设置
output.logstash:
  # The Logstash hosts
  # Logstash 主机地址
  hosts: ["localhost:5044"]

  # Optional SSL. By default is off. 开启ssl
  # List of root certificates for HTTPS server verifications
  #ssl.certificate_authorities: ["/etc/pki/root/ca.pem"]

  # Certificate for SSL client authentication
  #ssl.certificate: "/etc/pki/client/cert.pem"

  # Client Certificate Key
  #ssl.key: "/etc/pki/client/cert.key"




后台启动filebeat
nohup ./filebeat -c filebeat.yml &

接下来要在logstash中配置接收filebeat发送的日志

在logstash根目录的config下新建filebeat-logstash.conf
vim config/filebeat-logstash.conf 

进行以下编辑

input{
	#用于接收filebeat发送的日志
	beats{
		port => 5044 #接收日志的端口号,要和filebeat的配置一样
		ssl => false #是否开启ssl加密
		codec => json #格式设置为json否则下面输出的自定义字段取不到值
	}
}

output{
	#输出配置,将日志输出到elasticsearch中
	elasticsearch{
		hosts => ["localhost:9200"] #es的端口号
		index => ["%{[fileds][appname]}-%{+YYYY.MM.dd}"] #自定义索引的名称,在filebeeat设置的自定义字段的值加上当前的日期
	}
}

停止logstash

ps -ef |grep logstash #查询出pid
kill -9 pid 结束logstash的进程

重新启动logstash

nohup logstash-6.3.0/bin/logstash -f  logstash-6.3.0/config/filebeat-logstash.conf & #后台运行

通过logback发送日志

可以直接在springboot项目中通过Logback配置,直接发送日志到logstash中

导入依赖

<dependency>
	<groupId>net.logstash.lockback</groupId>
	<artifactId>logstash-logback-encoder</artifactId>
	<version>5.3</version>
</dependency>

在resource下新建logback.xml配置文件

logback.xml

<?xml version="1.0" encoding="UTF-8"?>	
<!DOCTYPE configuration>	
<configuration>	
    <include resource="org/springframework/boot/logging/logback/defaults.xml"/>	
    <include resource="org/springframework/boot/logging/logback/console-appender.xml"/>	
    <!--应用名称-->	
    <property name="APP_NAME" value="mall-admin"/>	
    <!--日志文件保存路径-->	
    <property name="LOG_FILE_PATH" value="${LOG_FILE:-${LOG_PATH:-${LOG_TEMP:-${java.io.tmpdir:-/tmp}}}/logs}"/>	
    <contextName>${APP_NAME}</contextName>	
    <!--每天记录日志到文件appender-->	
    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">	
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">	
            <fileNamePattern>${LOG_FILE_PATH}/${APP_NAME}-%d{yyyy-MM-dd}.log</fileNamePattern>	
            <maxHistory>30</maxHistory>	
        </rollingPolicy>	
        <encoder>	
            <pattern>${FILE_LOG_PATTERN}</pattern>	
        </encoder>	
    </appender>	
    <!--输出到logstash的appender-->	
    <appender name="LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender">	
        <!--可以访问的logstash日志收集端口-->	
        <destination>192.168.xxx.xxx:4560</destination>	
        <encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder">
            <!--自定义字段-->
            <customFields>{"appname":"myapplication"}</customFields>
        </encoder>
    </appender>	
    <root level="INFO">	
        <appender-ref ref="CONSOLE"/>	
        <appender-ref ref="FILE"/>	
        <appender-ref ref="LOGSTASH"/>	
    </root>	
</configuration>

在logstash中配置接收logback发送的日志

在logstash根目录的config下新建lockback-logstash.conf

vim config/lockback-logstash.conf 

进行以下编辑

input{

	tcp{
		port => 4506 #接收日志的端口号
		codec => json #格式设置为json否则下面输出的自定义字段取不到值
	}
}

output{
	#输出配置,将日志输出到elasticsearch中
	elasticsearch{
		hosts => ["localhost:9200"] #es的端口号
		index => ["%{[appname]}-%{+YYYY.MM.dd}"] #自定义索引的名称,appname是在logback配置文件中定义的字段名称
	}
}

停止logstash

ps -ef |grep logstash #查询出pid
kill -9 pid 结束logstash的进程

重新启动logstash

nohup logstash-6.3.0/bin/logstash -f  logstash-6.3.0/config/lockback-logstash.conf & #后台运行

重启项目之后,logback就会将日志发送到logstash中了

参考博客:https://blog.csdn.net/weixin_38117908/article/details/120157417
https://blog.csdn.net/fei003/article/details/104645406/

上一篇:QT 的信号与槽


下一篇:Blog.076 ELK 企业级日志分析系统