分布式日志 ELK (8.1.0版本)搭建..

142 阅读4分钟

分布式日志

基本介绍

什么是分布式日志
在分布式应用中,日志被分散在储存不同的设备上。如果你管理数十上百台服务器,你还在使用依次登录每台机器的传统方法查阅日志。这样是不是感觉很繁琐和效率低下。所以我们使用集中化的日志管理,分布式日志就是对大规模日志数据进行采集、追踪、处理。

为什么要使用分布式日志
一般我们需要进行日志分析场景:直接在日志文件中grep、awk就可以获得自己想要的信息。但在规模较大的场景中,此方法效率低下,面临问题包括日志量太大如何归档、文本搜索太慢怎么办、如何多维度查询。需要集中化的日志管理,所有服务器上的日志收集汇总。常见解决思路是建立集中式日志收集系统,将所有节点上的日志统一收集,管理,访问。

ELK 分布式日志
实际上ELK是三款软件的简称,分别是Elasticsearch、Logstash、Kibana组成。

Elasticsearch 基于java,是个开源分布式搜索引擎,它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。

Kibana 基于nodejs,也是一个开源和免费的工具,Kibana可以为Logstash和ElasticSearch提供的日志分析友好的Web 界面,可以汇总、分析和搜索重要数据日志。

Logstash 基于java,是一个开源的用于收集,分析和存储日志的工具。

下载地址:本文中用的版本8.1.0

Elasticsearch: www.elastic.co/cn/download…
Logstash: www.elastic.co/cn/download…
Kibana: www.elastic.co/cn/download…

安装

安装Elasticsearch

解压到相应的目录

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

修改配置文件

cd /usr/local/elasticsearch-8.1.0/config/
vim elasticsearch.yml

#修改文件
node.name: node-1
path.data: /usr/local/elasticsearch-8.1.0/data
path.logs: /usr/local/elasticsearch-8.1.0/logs
#0.0.0.0外网可以访问
network.host: 0.0.0.0 
http.port: 9200
discovery.seed_hosts: ["127.0.0.1"]
cluster.initial_master_nodes: ["node-1"]

xpack.security.http.ssl: 
  enabled: false  #默认true,把这个关掉 8.0以上版本默认需要用https访问,这里关掉可以避免一些其他的麻烦
  keystore.path: certs/http.p12

创建es用户 因为ElasticSearch不支持Root用户直接操作,因此我们需要创建一个es用户

useradd es
chown -R es:es /usr/local/elasticsearch-8.1.0

启动

启动前还需求设置下

#修改/etc/security/limits.conf ,追加内容
vim /etc/security/limits.conf
#追加
* soft nofile 65536
* hard nofile 65536

#修改/etc/sysctl.conf
vm.max_map_count=655360
#修改完执行sysctl ‐p 修改内核参数马上生效
sysctl ‐p

启动es切换用户成es用户进行操作

su - es
/usr/local/elasticsearch-8.1.0/bin/elasticsearch

/usr/local/elasticsearch-8.1.0/bin/elasticsearch -d #后台启动

在浏览器打开9200端口地址: (http://192.168.0.115:9200/ (opens new window)),如果出现了下面的信息,就表示已经成功

#重置密码
#登录es有个默认用户(elastic)密码,默认密码在第一次运行时会打印在log中,如果找不到也可以重置
./elasticsearch-reset-password -u elastic
{
  "name": "node-1",
  "cluster_name": "elasticsearch",
  "cluster_uuid": "Csi8tGPZQ16eppsL7qg16A",
  "version": {
    "number": "8.1.0",
    "build_flavor": "default",
    "build_type": "tar",
    "build_hash": "3700f7679f7d95e36da0b43762189bab189bc53a",
    "build_date": "2022-03-03T14:20:00.690422633Z",
    "build_snapshot": false,
    "lucene_version": "9.0.0",
    "minimum_wire_compatibility_version": "7.17.0",
    "minimum_index_compatibility_version": "7.0.0"
  },
  "tagline": "You Know, for Search"
}

安装Kibana

解压到相应的目录

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

修改配置文件

cd /usr/local/kibana-8.1.0/config
vim kibana.yml
##配置文件
server.port: 5601 
server.host: "0.0.0.0" 
elasticsearch.hosts: ["http://192.168.0.115:9200"] 
#需要个es用户(kibana_system)  重置密码  ./elasticsearch-reset-password -u kibana_system
elasticsearch.username: "kibana_system"
elasticsearch.password: "UaDY7n+d_XoRY2_0yXhz"
i18n.locale: "zh-CN"

启动

切换用户成es用户进行操作

su - es
/usr/local/kibana-8.1.0/bin/kibana 
#后台启动
/usr/local/kibana-8.1.0/bin/kibana & kibana.log

在浏览器打开5601端口地址: (http://192.168.0.115:5601/ (opens new window)),如果出现了下面的信息,就表示已经成功启动了
注: 这时需要输入一个账户密码:就是es的 账号:elastic 密码:es密码

安装Logstash

解压到相应的目录

tar -zxvf logstash-8.1.0-linux-x86_64.tar.gz -C /usr/local

新增配置文件

cd /usr/local/logstash-8.1.0/bin
vim logstash-elasticsearch.conf

配置

# Sample Logstash configuration for creating a simple
# Beats -> Logstash -> Elasticsearch pipeline.
input {
  file {
    #收集文件的路径
    path => ["/home/java/data_room/logs/*/*.log"]
    #忽略文件
    #exclude => ['error.*.log','info.*.log']
   start_position => beginning
   #从头读文件
   sincedb_path => "/dev/null" 
   
   #multiline把单行数据合并为一行
   codec => multiline {
    #正则匹配开头:每条数据的开始
      pattern => "^\d{2}:\d{2}:\d{2}"
      # true表示若pattern正则匹配,则执行合并;false表示若pattern正则匹配失败,则执行合并。默认为false
      negate => true
      #这个属性的含义是超过多少秒没有新数据来就会把当前行作为一行数据处理,不再等后面的数据了,这个1就是1秒
      auto_flush_interval => 3
      # previous表示跟前面的行合并;next表示跟后面的行合并
      what => previous
    }
  }
}

filter {
  #在 message 中正则匹配 INFO 
  if [message] =~ "INFO" {
    # replace 新增字段 type
    mutate { replace => { type => "sys-info" } }
    grok {
      match => { "message" => "%{COMBINEDAPACHELOG}" }
    }
    date {
      match => [ "timestamp" , "dd/MMM/yyyy:HH:mm:ss Z" ]
    }
  } else if [message] =~ "ERROR" {
    mutate { replace => { type => "sys-error" } }
  } else {
    mutate { replace => { type => "random_logs" } }
    date {
      match => [ "timestamp" , "dd/MMM/yyyy:HH:mm:ss Z" ]
    }
  }
}

output {
  elasticsearch {
    hosts => ["http://192.168.0.115:9200"]
    index => "info-%{+YYYY.MM.dd}"
    #es的账号密码
    user => "elastic"
    password => "IYmedB6hHb-gju_=nCAp"
  }
  stdout { codec => rubydebug }
}
其他配置

logstash的mutate过滤器的使用: www.cnblogs.com/huan1993/p/…

启动

./logstash -f logstash-elasticsearch.conf
#这里启动时遇到个小问题,他总是去/usr/local/logstash-8.1.0找配置文件,所以我在这个目录下也创建了一个配置文件...

这里ELK就已经搭建结束了,可以正常使用.