优秀的编程知识分享平台

网站首页 > 技术文章 正文

Elk日志服务搭建Elasticsearch,logstash,kibana,filebeat

nanyue 2024-11-15 22:55:28 技术文章 1 ℃

本教程是用来记录整个搭建的过程,希望能帮到有需要的小伙伴,单节点服务搭建,采用rpm安装方式搭建。

1.elasticsearch

1.1 elasticsearch下载安装

wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.10.2-x86_64.rpm
sudo rpm --install elasticsearch-7.10.2-x86_64.rpm

1.2 修改配置文件

编辑elasticsearch.yml,rpm安装完后配置文件是放在/etc/elasticsearch 目录中,输入命令

vi /etc/elasticsearch/elasticsearch.yml
network.host: 0.0.0.0

1.3 配置服务

# 设置守护进程启动,添加服务
/bin/systemctl daemon-reload
/bin/systemctl enable elasticsearch.service

# 启动、停止命令
systemctl start elasticsearch.service
systemctl stop elasticsearch.service
# 查看服务启动状态
systemctl status elasticsearch.service

#验证是否成功
curl -X GET "localhost:9200/?pretty"

# 要列出 elasticsearch 服务的日志条目
journalctl --unit elasticsearch

# 要从给定时间开始列出 elasticsearch 服务的日志条目
journalctl --unit elasticsearch --since  "2016-10-30 18:17:16"

1.4 rpm安装后程序相关目录

rpm安装的程序路径在 
主程序目录: /usr/share/elasticsearch/
配置目录: /etc/elasticsearch
日志: /var/log/elasticsearch

1.5 更多配置/目录信息

RPM 还有一个系统配置文件 ( /etc/sysconfig/elasticsearch),它允许您设置以下参数:

ES_JAVA_HOME
设置要使用的自定义 Java 路径。

MAX_OPEN_FILES
最大打开文件数,默认为65535.

MAX_LOCKED_MEMORY
最大锁定内存大小。unlimited如果您使用bootstrap.memory_lockelasticsearch.yml 中的 选项,请设置为。

MAX_MAP_COUNT
进程可能拥有的最大内存映射区域数。如果您mmapfs 用作索引存储类型,请确保将其设置为高值。欲了解更多信息,请查看 Linux内核文件 有关max_map_count。这是sysctl在启动 Elasticsearch 之前设置的。默认为262144.

ES_PATH_CONF
配置文件目录(其中必须包括elasticsearch.yml, jvm.options,和log4j2.properties文件); 默认为 /etc/elasticsearch.

ES_JAVA_OPTS
您可能想要应用的任何其他 JVM 系统属性。

RESTART_ON_UPGRADE
配置包升级时重启,默认为false. 这意味着您必须在手动安装软件包后重新启动 Elasticsearch 实例。这样做的原因是为了确保集群中的升级不会导致连续的分片重新分配,从而导致高网络流量并减少集群的响应时间。

使用的发行版systemd要求通过systemd而不是通过/etc/sysconfig/elasticsearch 文件配置系统资源限制。有关更多信息,请参阅Systemd 配置。

RPM的目录布局编辑
RPM 将配置文件、日志和数据目录放置在基于 RPM 的系统的适当位置:

Elasticsearch 主目录或 $ES_HOME
/usr/share/elasticsearch

垃圾桶
二进制脚本,包括elasticsearch启动节点和elasticsearch-plugin安装插件
/usr/share/elasticsearch/bin

配置文件
配置文件包括 elasticsearch.yml
/etc/elasticsearch

ES_PATH_CONF
配置文件
环境变量包括堆大小、文件描述符。
/etc/sysconfig/elasticsearch

数据
节点上分配的每个索引/分片的数据文件的位置。
/var/lib/elasticsearch
path.data

jdk
用于运行 Elasticsearch 的捆绑 Java 开发工具包。可以通过ES_JAVA_HOME在/etc/sysconfig/elasticsearch.
/usr/share/elasticsearch/jdk

日志
日志文件位置。
/var/log/elasticsearch
path.logs

插件
插件文件位置。每个插件都将包含在一个子目录中。
/usr/share/elasticsearch/plugins

共享文件系统存储库位置。可以容纳多个位置。文件系统存储库可以放置在此处指定的任何目录的任何子目录中。
path.repo

1.6测试是否运行成功

打开浏览器输入:http://127.0.0.1:9200/

输出上图说明安装成功

2.kibana

2.1 下载安装

wget https://artifacts.elastic.co/downloads/kibana/kibana-7.10.2-x86_64.rpm
sudo rpm --install kibana-7.10.2-x86_64.rpm

2.2 修改配置

修改/etc/kibana/kibana.yml 文件

cd /etc/kibana/
vi kibana.yml

修改文件内容

server.host: "0.0.0.0"
# 设置中文
i18n.locale: "zh-CN"

2.3 配置服务

添加守护进程, root 用户可以不用sudo

#添加守护进程
sudo /bin/systemctl daemon-reload
sudo /bin/systemctl enable kibana.service

# 启动和重启命令
sudo systemctl start kibana.service
sudo systemctl stop kibana.service
# 查看状态
systemctl status kibana.service -l
# 验证是否安装成功,查看日志
journalctl -u kibana.service

2.4 安装后配置目录与elasticsearch 相同,见1.4

2.5 访问后台页面

在浏览器输入http://127.0.0.1:5601/ 进入后台页面

3.logstash安装

3.1 下载安装

wget https://artifacts.elastic.co/downloads/logstash/logstash-7.10.2-x86_64.rpm
sudo rpm --install logstash-7.10.2-x86_64.rpm

3.2 增加管道配置

进入到 /etc/logstash/conf.d/ 添加需要的通道文件

cd /etc/logstash/conf.d/
vi panpan-pipeline.conf

这里安装采集nginx的日志为例,配置中增加了geoip ,解析ip 信息,使用kibana maps 展示热力图,或ip归属分布信息

panpan-pipeline.conf

input{
  
  beats {
        port => "5044"
    }
}
filter{
    # 判断输入的类型
  if [event][module] == 'nginx' {
      # 使用 grop 正则匹配 nginx 日志整理成对象存入 es
      grok {
          # 匹配方式1
          # match => { "message" => "%{COMBINEDAPACHELOG}"}
          # 自定义截取,根据nginx日志格式进行拆分
          match => { "message" => "%{IP:localip} - (%{USERNAME:user}|-) \[%{HTTPDATE:timestamp}\] \"%{WORD:request_verb} %{NOTSPACE:request} HTTP/%{NUMBER:httpversion}\" %{NUMBER:status:int} %{NUMBER:body_sent:int} \"-\" \"%{GREEDYDATA:agent}\" \"%{IP:clientip}\"" }
      }
      # 拆分ip,取最远端ip
      mutate {
        split => ["clientip", ","]
        add_field => { "request_ip" => "%{clientip[0]}" }
      }
      mutate {
        rename => ["request_ip", "clientip" ]
      }
      # 解析ip 信息,使用kibana maps 展示热力图
      geoip {
          # 数据源 ip 字段
          source => "clientip"
          # 解析后输出字段
          target => "geoip"
      }
  }else{
      # 日志内容是json格式数据 进行解析json数据
      json {
          # 数据源字段
          source => "message"
          # 解析后输出到的字段
          target => "doc"
      }
      # 处理日志名
      grok {
          match => {"[log][file][path]" => "(?<filename>([a-zA-Z0-9_]+.log$)|([a-zA-Z0-9_]+.log.[0-9]+$))"}
      }
        # 获取ip经纬度信息
        geoip {
            # 数据源字段
            source => "[doc][source_ip]"
            # 解析后输出的字段
            target => "geoip"
            # 天加的字段
            add_field => [ "[geoip][coordinates]", "%{[geoip][longitude]}" ]
            add_field => [ "[geoip][coordinates]", "%{[geoip][latitude]}"  ]
        }
        # 转换格式
        mutate {
            convert => [ "[geoip][coordinates]" ,"float"]
        }
  }
}
# 输出到logstash 控制台
#output{
#  stdout {
#    codec => rubydebug
#  }
#}

# 输出到elasticsearch
output {
    # 判断类型输出到对应的索引数据中
  if [event][module] == 'nginx' {
    elasticsearch {
       hosts => ["http://127.0.0.1:9200"]
       # 自定义索引名称
       index => "panpan-nginx-%{+YYYY.MM.dd}"
    }
  } else {
    elasticsearch {
       hosts => ["http://127.0.0.1:9200"]
       index => "panpan-%{[fields][source]}-%{+YYYY.MM.dd}"
    }
  }
}

3.3 配置服务

设置守护进程,如果不是root用户登录,需要使用 sudo 执行命令

# 配置守护进程
/bin/systemctl daemon-reload
/bin/systemctl enable logstash.service

# 启动和重启命令
systemctl start logstash.service
systemctl stop logstash.service

# 验证是否安装成功,查看日志
journalctl -u logstash.service

4.Filebeat安装

4.1 下载安装

wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.10.2-x86_64.rpm
sudo rpm -vi filebeat-7.10.2-x86_64.rpm

4.2修改配置文件

cd /etc/filebeat/
vi filebeat.yml

配置paths 填入需要采集的日志文件目录

Filebeat.yml

filebeat.inputs:
- type: log
  enabled: true
  paths: 
    - /var/log/*/*.log*
    - /var/log/nginx/*/*.log*

  fields:
    source: think
  # 支持正则 排除匹配的文件 ,过滤不需要的文件
  # exclude_files: ['-']
  # json.keys_under_root: true
  # json.add_error_key: true 
  # # json.message_key: msg
  # tags: ["json"]

  #index: "%{[agent.name]}-myindex-%{+yyyy.MM.dd}"
setup.template.settings:
  index.number_of_shards: 1


# 开启 modules 
filebeat.config.modules:
  # Glob pattern for configuration loading
  path: ${path.config}/modules.d/*.yml
  enabled: true
  # Set to true to enable config reloading
  reload.enabled: false

#  控制台 输出信息
# output.console:
#   pretty: true
#   enable: true

# 输出到 logstash 
output.logstash:
  hosts: ["127.0.0.1:5044"]

# 输出到es
# output.elasticsearch:
#   # Array of hosts to connect to.
#   hosts: ["localhost:9200"]
  # index: "service-101-%{+yyyy.MM.dd}"
# 自定义索引还没有调通,需要进一步调试
#   index: "filebeat-%{[agent.version]}-%{+yyyy.MM.dd}"
#   # indices:
#   #   - index: "critical-%{[bjson.type]}-%{+yyyy.MM.dd}"
#   #     when.contains:
#   #       message: "CRITICAL"
#   #   - index: "error-%{[json.type]}-%{+yyyy.MM.dd}"
#   #     when.contains:
#   #       message: "ERR"

4.3 配置服务

# 添加守护进程
systemctl daemon-reload
systemctl enable filebeat.service

# 重启和停止
systemctl start filebeat.service
systemctl stop filebeat.service

4.4 程序目录

-c /etc/filebeat/filebeat.yml
-path.home /usr/share/filebeat 
-path.config /etc/filebeat 
-path.data /var/lib/filebeat 
-path.logs /var/log/filebeat

4.5 开启nginx模块

命令行中输入一下命令

#查看 列表
filebeat modules list

# 开启
filebeat modules enable system nginx 

4.6 配置nginx日志路径

进入到/etc/filebeat/module.d 会有一个nginx.yml文件,编辑文件

- module: nginx
  access:
    var.paths: ["/var/log/nginx/access.log*"]

4.7修改完配置后需要重启服务

启动后如果有日志文件可以在kibana后台看到创建的索引数据。

5.nginx日志格式配置

修改nginx.conf 文件,在 http 里面增加下边代码

# 采集nginx, 日志格式
 log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

输出样式:格式 127.0.0.1 - - [28/Nov/2021:20:41:43 +0800] "POST /stage/sub/sub-api/test HTTP/1.0" 200 54 "-" "PostmanRuntime/7.28.4" "121.205.16.117"

内容不是很细,而且还有很多不足之处,如有错误之处或配置不合理之处,可以在评论区交流学习。

最近发表
标签列表