ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2021-10-15 11:33:48  阅读:194  来源: 互联网

标签:elk filebeat logstash elasticsearch 6.3 docker 日志


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

日志收集的主要流程

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

image

使用的软件版本

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

创建完后重新启动,发现还有错误
image

解决报错问题

(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"

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

image

安装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"

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

image

安装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页面

image

接收项目的日志

现在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/

标签:elk,filebeat,logstash,elasticsearch,6.3,docker,日志
来源: https://www.cnblogs.com/TidalCoast1034/p/15410233.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有