微服务下ELK统一日志系统搭建


1.安装部署elasticsearch-7.3.0

https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.3.0-linux-x86_64.tar.gz
上传到服务器 /opt/cjq

2.解压Elasticsearch

tar -zxvf elasticsearch-7.3.0-linux-x86_64.tar.gz

3.修改Elasticsearch的配置文件

cd elasticsearch-7.3.0/config/
vim elasticsearch.yml

4.修改配置文件(中文会引起报错,将中文部分删除即可)

# 如果需要部署集群,集群需要同样的集群名
cluster.name: cjq-application
# 每个node的名字需要唯一
node.name: cjq-1
# 注意一定要是路径后面加上/var/lib/elasticsearch/nodes,要不然无法加入集群,单机不需要
# path.data: /var/lib/elasticsearch/nodes
# path.logs: /var/log/elasticsearch
# 配置服务器的内网地址,有文档配置的0.0.0.0或localhost,但是后面出现了问题,暂未研究什么原因
network.host: 192.168.1.141
# 配置端口号,默认9200
http.port: 9200
# 配置集群节点,多个服务器["node-1", "node-2"]
cluster.initial_master_nodes: ["cjq-1"]
# discovery.seed_hosts: ["192.168.0.146", "192.168.0.147", "192.168.0.148"]
# 解决跨域
http.cors.enabled: true
http.cors.allow-origin: "*"

5.启动Elasticsearch 需用elsearch用户启动

注意:启动时,不可以使用root用户。
# 创建elsearch组
groupadd elsearch
useradd elsearch(用户名) -g elsearch(组名) -p elsearch(密码)
# 给新创建用户文件夹执行权限
chown -R elsearch:elsearch /opt/cjq/elasticsearch-7.3.0
# 切换elsearch用户
su elsearch

6.启动ElasticSearch报错[1]: max file descriptors [4096] for elasticsearch process is too low

解决办法:

修改 etc/security/limits.conf

sudo vi /etc/security/limits.conf
在文件最后面加上
* soft nofile 65536
* hard nofile 131072
* soft nproc 2048
* hard nproc 4096
注:*后面有空格
修改 /etc/sysctl.conf

sudo vi /etc/sysctl.conf
在文件最后面加上

vm.max_map_count=262144

配置重新生效
sysctl -p
重新启动
进入/opt/cjq/elasticsearch-7.3.0/bin目录下执行
sh elasticsearch &

7.启动成功后,访问 http://192.168.1.141:9200/

{
  "name" : "cjq-1",
  "cluster_name" : "cjq-application",
  "cluster_uuid" : "KdgE7GOpQoaMzyctiL4nnw",
  "version" : {
    "number" : "7.3.0",
    "build_flavor" : "default",
    "build_type" : "tar",
    "build_hash" : "de777fa",
    "build_date" : "2019-07-24T18:30:11.767338Z",
    "build_snapshot" : false,
    "lucene_version" : "8.1.0",
    "minimum_wire_compatibility_version" : "6.8.0",
    "minimum_index_compatibility_version" : "6.0.0-beta1"
  },
  "tagline" : "You Know, for Search"
}

8.安装部署ElasticSearch的Head插件

注意:安装head需要安装node和npm 参考:https://www.cnblogs.com/bejamin/p/14439970.html
注意: 之前安装node最新版本(16.14.0)没法用,后改用(8.14.0)正常
注意: github官网无法访问或者下载很慢
hosts文件用ip配置github域名
#github ipconfig /flushdns
140.82.112.4 github.com
199.232.69.194 github.global.ssl.fastly.net
185.199.108.153 assets-cdn.github.com
185.199.110.153 assets-cdn.github.com
185.199.111.153 assets-cdn.github.com

下载地址:https://github.com/mobz/elasticsearch-head.git
下载后执行:
unzip elasticsearch-head-master.zip
# 安装module
npm install
# 运行head插件 需用elsearch用户启动
npm run start &

访问界面 http://192.168.1.141:9100/

9.安装部署Logstash

下载Logstash
https://artifacts.elastic.co/downloads/logstash/logstash-7.3.0.tar.gz

解压Logstash
tar -zxvf logstash-7.3.0.tar.gz

要测试Logstash安装成功,运行最基本的Logstash管道。 执行以下的命令
./logstash -e 'input { stdin { } } output { stdout {} }'
然后在命令提示符下输入hello world,显示的如下:

hello world
{
"host" => "localhost.localdomain",
"@version" => "1",
"@timestamp" => 2022-02-14T09:50:46.954Z,
"message" => "hello world"
}

10.配置logstash输出到elasticsearch

cd logstash-7.3.0/config/
vim logstash-sample.conf

修改完配置如下:

input {
beats {
port => 5044
}
tcp {
port => 4569
codec => "json"
}
stdin{
}
}

filter {
geoip {
source => "x_forword_ip"
target => "x_forword_geo"
}

date {
match => [ "timestamp" , "dd/MMM/YYYY:HH:mm:ss Z" ]
}

useragent {
source => "ngx_ua"
target => "ua"
}

mutate {
split => { "x_forword" => ", " }
}
mutate {
rename => { "[host][name]" => "host" }
}
}

output {
elasticsearch {
hosts => ["192.168.1.141:9200"]
index => "cjq_index"
codec => rubydebug
}
stdout { codec => rubydebug }
}

更多配置参照官网教程:https://www.elastic.co/guide/en/logstash/current/advanced-pipeline.html
可以参考该logstash手册:https://doc.yonyoucloud.com/doc/logstash-best-practice-cn/get_start/hello_world.html

控制台测试启动
./bin/logstash -f ./config/logstash-sample.conf

后台启动logstash  -真正使用
nohup ./bin/logstash -f ./config/logstash-sample.conf &>nohup.log&

11.logstash结合filebeat使用

在分布式系统中,一台主机可能有多个应用,应用将日志输出到主机的指定目录,这时由logstash来搬运日志并解析日志,然后输出到elasticsearch上。由于于
logstash是java应用,解析日志是非常消耗cpu和内存,logstash安装在应用部署的机器上显得非常的笨重。最常见的做法是用filebeat部署在应用的机器上,logstash单独部署,然后由
filebeat将日志输出给logstash解析,解析完由logstash再传给elasticsearch。

下载filebeat,下载命令如下:

wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.3.0-linux-x86_64.tar.gz
tar -zxvf filebeat-7.3.0-linux-x86_64.tar.gz
cd /filebeat-7.3.0-linux-x86_64/

vim filebeat.yml修改配置:
filebeat.inputs:
- type: log
enabled: true
paths:
- /opt/apphome/msdp-2.0/msdp-wk-biz.log
output.logstash:
hosts: ["192.168.1.141:5044"]

主要配置的是日志的搜集目录为/opt/apphome/msdp-2.0/msdp-wk-biz.log,这个目录是应用service输出日志的文件。输出到logstsh的地址为192.168.1.141

启动filebeat,执行以下命令:

sudo chown root filebeat.yml
sudo ./filebeat -e >filebeat.log 2>&1 &
这样日志就传输到了logstash, 然后通过logstash输出到elasticsearch
具体效果需要结合Kibana或者通过elasticsearch-head查看

 

12.SpringCloud + logstash结合logbak使用(暂时未使用)

此方式将通过tcp方式直接把日志输出到logstash服务器
在pom文件引用


net.logstash.logback
logstash-logback-encoder
5.2

在resources添加logbak的配置文件 logback-spring.xml:
<?xml version="1.0" encoding="UTF-8"?>






${log.pattern}







192.168.0.146

4569
//引入过滤类


{"appname":"ceshi"} // 索引名





其中{“appname”:“ceshi”} 对应logstash配置文件中的appname,为创建的索引名。
可以在Kibana索引管理中根据名称进行分区搜索。根据自己的需求来

编写测试方法:
@Slf4j
@RestController
public class TestController {
@RequestMapping(value = "/test")
public String test(String id) {
log.info("这是一个日志测试的controller");
return "这是一个日志测试的controller";
}
}

13.安装部署Kibana

下载Kibana
wget https://artifacts.elastic.co/downloads/kibana/kibana-7.3.0-linux-x86_64.tar.gz

解压Kibana
tar -zxvf kibana-7.3.0-linux-x86_64.tar.gz

修改Kibana的配置文件
cd kibana-7.3.0/config/
vim kibana.yml

修改配置文件如下:
# 端口
server.port: 5601
# 指定本机ip让外部能访问
server.host: "0.0.0.0"
# 请求数据指向的elasticsearch服务器
elasticsearch.hosts: ["http://192.168.1.141:9200"]

配置完启动kibana,进入bin目录执行
sh kibana &

访问http://192.168.1.141:5601

查看通过logstash传输的日志列表

配置索引模式

 查看日志

 14.参考文献

https://blog.csdn.net/qq_34988304/article/details/100058049

elk