ELFK自定义安装,并收集nginx日志-浅入浅出

参考文档

参考文档①

概述

ELFK官网下载地址
Fliebeat为客户端。
Logstash+Elastsearch+Kibana 为服务端。(本文Elasticsearch没有做集群,而是单节点,后期考虑集群)
例如业务服务器上面只需要安装客户端就行了,filebeat只需要将指定日志文件中的数据传输到服务端即可,资源消耗小,轻量级。这样可以尽可能不影响业务端上的业务程序。
而且ELK服务端即使挂了也不会影响到业务端。

部署架构图大致如下

在这里插入图片描述

Logstash和filebeat是什么关系

Lf关系原文链接
因为logstash是jvm跑的,资源消耗比较大,所以后来作者又用golang写了一个功能较少但是资源消耗也小的轻量级的logstash-forwarder。不过作者只是一个人,加入http://elastic.co公司以后,因为es公司本身还收购了另一个开源项目packetbeat,而这个项目专门就是用golang的,有整个团队,所以es公司干脆把logstash-forwarder的开发工作也合并到同一个golang团队来搞,于是新的项目就叫filebeat了。
logstash 和filebeat都具有日志收集功能,filebeat更轻量,占用资源更少,但logstash 具有filter功能,能过滤分析日志。一般结构都是filebeat采集日志,然后发送到消息队列,redis,kafaka。然后logstash去获取,利用filter功能过滤分析,然后存储到elasticsearch中。

服务端环境

Centos7 4核16G
创建对应目录目录以及用户,Elastic Search启动:由于ES的启动不能用root账号直接启动,需要新创建用户,然后切换新用户去启动,接下来都以elsearch用户操作

useradd elsearch 
mkdir -p /data/elk && cd /data/elk
chown -R elsearch.elsearch /data/elk
su - elsearch

JDK

下载地址
java环境变量就不再详细阐述,jdk版本需要大于1.8

Elastsearch

下载地址

cd /data/elk
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.3.2-linux-x86_64.tar.gz
tar -xvf elasticsearch-7.3.2 && mv elasticsearch-7.3.2 elasticsearch

编辑配置

修改elasticsearch/config/elasticsearch.yml添加或修改以下内容

#es名称
cluster.name: my_es_cluster
#节点名称
node.name: elk
#索引数据存放地址
path.data: /data/elk/elasticsearch/data
#es日志存放地址
path.logs: /data/elk/elasticsearch/logs
http.cors.enabled: true
http.cors.allow-origin: "*"
node.master: true
node.data: true
# 配置白名单 0.0.0.0表示其他机器都可访问
network.host: 0.0.0.0
transport.tcp.port: 9300
#tcp 传输压缩
transport.tcp.compress: true
#绑定端口
http.port: 9200
discovery.zen.ping.unicast.hosts: ["elk"]

启动Elasticsearch

/data/elk/elasticsearch/bin/elasticsearch &

启动报错

启动过程中,会出现一些报错信息,如:
1、max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536]
2、max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
解决问题(1):将当前用户的软硬限制调大。
切换到root用户
修改**/etc/security/limits.conf**添加或修改以下内容

* soft nproc 65536
* hard nproc 65536
* soft nofile 65536
* hard nofile 65536

– 保存退出
– 不需要重启,重新登录即生效
– 查看修改命名是否生效

ulimit -n

– 结果65536

ulimit -H -n

– 结果65536
解决问题(2):调大elasticsearch用户拥有的内存权限

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

保存后执行命令

sysctl -p

再切换回elsearch用户

再次启动Elasticsearch

/data/elk/elasticsearch/bin/elasticsearch &

访问Elasticsearch

若访问不了,优先关闭防火墙测试
访问结果是一串json,说明启动成功了。

#访问地址
http//IP:9200

Kibana

下载地址

下载指南

下载并解压,修改名字

cd /data/elk
wget https://artifacts.elastic.co/downloads/kibana/kibana-7.3.2-linux-x86_64.tar.gz
tar -xvf kibana-7.3.2-linux-x86_64.tar.gz && mv kibana-7.3.2-linux-x86_64 kibana

编辑配置

vim kibana/config/kibana.yml

最下方修改或添加

#汉化
i18n.locale: "zh-CN"
#kibana监听端口
server.port: 5601
#默认内外网都可以访问
server.host: "0.0.0.0"
#elasticsearch.hosts内部访问地址
elasticsearch.hosts: ["http://localhost:9200"]
kibana.index: ".kibana"

由于 kibana5.* 6.* 官方并没有支持中文,需要另外下载补丁包 推荐下面这个 ↓
https://github.com/anbai-inc/Kibana_Hanization
不过我这边下载的是7.*的版本,故直接修改配置文件即可,中文包在下面这个路径↓
找不到的就通过find搜索或locate也行 不过大概了解即可,这里就不在过多阐述。

kibana/node_modules/x-pack/plugins/translations/translations/zh-CN.jso

启动Kibana

/data/elk/kibana/bin/kibana &

访问Kibana

#访问地址
http://IP:5601

在这里插入图片描述
若访问不了,优先关闭防火墙测试

Logstash

下载地址

cd /data/elk
wget https://artifacts.elastic.co/downloads/logstash/logstash-7.3.2.tar.gz
tar -xvf logstash-7.3.2.tar.gz && mv logstash-7.3.2 logstash

编辑配置

默认无需改动,只需将logstash-sample.conf命名为logstash.conf即可

cp logstash/config/logstash-sample.conf logstash/config/logstash.conf

启动Logstash

–config.reload.automatic项会定期自动重载配置,可以不停止重启Logstash就可以修改配置。

/data/elk/logstash/bin/logstash -f /data/elk/logstash/config/logstash.conf --config.reload.automatic

客户端安装Filebeat,并以收集nginx日志为例

下载地址

mkdir -p /data && cd /data/
wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.3.2-linux-x86_64.tar.gz
tar -xvf filebeat-7.3.2-linux-x86_64.tar.gz && mv filebeat-7.3.2-linux-x86_64 filebeat
cd filebeat

编辑配置

修改** filebeat.yml** 以设置连接信息:

output.logstash:
  # The Logstash hosts
  #hosts: ["localhost:5044"]
  #修改为自己服务端的logstash ip:端口
  hosts: ["192.168.2.199:5044"]

在filebeat.inputs段中添加下列信息:

- type: log
  enabled: true
  paths:
  #也可以是其他程序日志
  - /var/log/nginx/access.log
  fields:
  #也可以其他索引名
  log_source: nginx-access
#------------------------------------
- type: log
  enabled: true
  paths:
  #也可以是其他程序日志
  - /var/log/nginx/error.log
  fields:
  #也可以其他索引名
   log_source: nginx-error

在这里插入图片描述

启动filebeat

nohup ./filebeat -e -c filebeat.yml >> logs/start.log 2> logs/error.log &

服务端logstash配置文件修改

修改** logstash.conf **以设置连接信息:

output {
 # filebeat传输过来的index名
  if "nginx-access" in [fields][log_source] {
  elasticsearch {
        #elasticsearch的ip:监听端口
    hosts => ["http://localhost:9200"]
    index => "nginx-access-%{+YYYY.MM}"
#    index => "%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}"
    #user => "elastic"
    #password => "changeme"

    }
  }
 # filebeat传输过来的index名
  if "nginx-error" in [fields][log_source] {
  elasticsearch {
        #elasticsearch的ip:监听端口
    hosts => ["http://localhost:9200"]
    index => "nginx-error-%{+YYYY.MM}"
#    index => "%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}"
    #user => "elastic"
    #password => "changeme"
    }
  }
}

在这里插入图片描述
因为之前在启动服务端logstash的时候,添加了这个参数**–config.reload.automatic项会定期自动重载配置**,可以不停止重启Logstash就可以修改配置。故无需做任何操作(也可以手动kill再启动logstash)

kibana上配置新增索引

访问服务端的kibana

http://服务端IP:5601

在这里插入图片描述
点击索引模式
在这里插入图片描述
创建索引,输入filebeat中定义的nginx-access
在这里插入图片描述
点击下一步
在这里插入图片描述
选择timestamp>>>创建索引模式即可
在这里插入图片描述
创建完成后回到discover发现
在这里插入图片描述
这时候直接看日志可能看不懂,没关系,点击字段,根据字段索引列出日志
在这里插入图片描述
选择message简介明了。over。就可以看到nginx的access日志了!
在这里插入图片描述
完成所有步骤后,通过自己需求,便可以随时浏览自己的数据,这边我没有在logstash上做过滤操作,有需要的请自行google。


测试情况

在国庆前,通过zabbix监控 ELK服务端 以及 F客户端 服务器的资源占用情况,至今情况来看,比较明显的是,
客户端Filebeat在产生filebeat收集的日志的时候,CPU以及 带宽占用 。有明显增长。(进程为filebeat)
服务端ELK在收集filebeat日志的时候,CPU以及 带宽占用 。有明显增长。(进程主要为elasticsearch)

### ELFK 配置文件解析与扩展日志收集 ELFK 是一个集成的日志处理系统,其核心组件包括 **Elasticsearch**、**Logstash**、**Kibana** 和 **Filebeat**。为了扩展 ELFK收集其他日志,需要对各个组件的配置文件进行调整和优化。 #### Filebeat 配置 Filebeat 是负责从应用服务器收集日志发送到 Logstash 或 Elasticsearch 的轻量级日志收集器。其配置文件通常位于 `/etc/filebeat/filebeat.yml`。 - **定义日志源**:在 `filebeat.inputs` 部分添加新的日志文件路径。例如,若要收集 `/var/log/myapp.log` 的日志,可以添加如下配置: ```yaml - type: log enabled: true paths: - /var/log/myapp.log ``` - **输配置**:将日志发送到 Logstash 或直接发送到 Elasticsearch。若使用 Logstash,则配置如下: ```yaml output.logstash: hosts: ["192.168.20.133:5044"] ``` #### Logstash 配置 Logstash 负责接收来自 Filebeat 的日志数据,对其进行解析和处理。Logstash 的主配置文件通常位于 `/etc/logstash/logstash.yml`,而具体的日志处理逻辑则在 `pipeline` 目录下的配置文件中定义,如 `logstash.conf`。 - **定义输**:在 `input` 块中指定 Logstash 监听的端口和协议。例如,监听 TCP 端口 5044: ```ruby input { beats { port => 5044 } } ``` - **过滤与解析**:在 `filter` 块中使用 `grok` 插件解析日志格式。例如,解析自定义日志格式: ```ruby filter { grok { match => { "message" => "%{TIMESTAMP_ISO8601:timestamp} %{LOGLEVEL:level} %{DATA:component} %{GREEDYDATA:message}" } } } ``` - **输配置**:将处理后的日志数据发送到 Elasticsearch。例如: ```ruby output { elasticsearch { hosts => ["http://192.168.20.128:9200"] index => "myapp-%{+YYYY.MM.dd}" } } ``` #### Elasticsearch 配置 Elasticsearch 是用于存储和搜索日志数据的分布式搜索引擎。其配置文件通常位于 `/etc/elasticsearch/elasticsearch.yml`。 - **集群配置**:确保所有 Elasticsearch 节点的 `cluster.name` 设置一致,以便它们能够加同一个集群。 - **节点角色**:根据节点的角色(主节点、数据节点等),调整 `node.master` 和 `node.data` 参数。 #### Kibana 配置 Kibana 提供了可视化界面,用于查看和分析存储在 Elasticsearch 中的日志数据。其配置文件通常位于 `/etc/kibana/kibana.yml`。 - **Elasticsearch 连接**:确保 Kibana 能够连接到 Elasticsearch 集群。例如: ```yaml elasticsearch.hosts: ["http://192.168.20.128:9200"] ``` #### 示例:收集 Nginx 日志 假设需要收集 Nginx 的访问日志,可以通过以下步骤进行配置: 1. **Filebeat 配置**:在 Filebeat 的配置文件中添加 Nginx 日志路径: ```yaml - type: log enabled: true paths: - /usr/local/nginx/logs/access.log ``` 2. **Logstash 配置**:在 Logstash 的配置文件中定义输、过滤和输: ```ruby input { beats { port => 5044 } } filter { grok { match => { "message" => "%{IP:clientip} - %{DATA:ident} \[%{HTTPDATE:timestamp}\] \"%{WORD:verb} %{URIPATH:request} %{URIPARAM:params} HTTP/%{NUMBER:httpversion}\" %{NUMBER:response} %{NUMBER:bytes} %{QS:referrer} %{QS:agent}" } } } output { elasticsearch { hosts => ["http://192.168.20.128:9200"] index => "nginx-access-%{+YYYY.MM.dd}" } } ``` #### 相关问题 1. 如何在 ELFK 中实现日志的实时监控和告警? 2. ELFK 支持哪些类型的日志格式?如何自定义解析规则? 3. 如何优化 ELFK 的性能以处理大规模日志数据? 4. 如何在 ELFK 中实现日志数据的安全性和权限管理? 5. ELFK 是否支持与其他日志收集工具(如 Fluentd)集成?如何操作?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大锅霍皮久

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值