天天看点

Ubuntu部署ELK Stack(包含在Docker环境下的部署)

搭建ELK Stack

​ 使用logstash收集docker容器产生的日志,并对日志过滤、处理等,最后上传到elasticsearch”存储库“中,kibana进行可视化管理,让用户在Elasticsearch中使用图形和图表对数据进行可视化。

​ 在安装ELK之前,首先确保主机安装java 1.8.0以上版本(java -version),如果没有的话,通过apt install进行安装。如果只想在docker中运行Elk,跳过本地安装elk的方法,请直接下拉至Run ElkStack on Docker。

Logstash

# download and install the public signing key
wget -qO - https://artifacts.elastic.co/GPE-KEY-elasticsearch | sudo apt-key add -
# install the apt-transport-https package on debian
sudo apt-get install apt-transport-https
# save the repository definition to /etc/apt/sources.list.d/elastic-7.x.list
echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-7.x.list
sudo apt-get update && sudo apt-get install logstash
           
#####     配置logstash.conf
           

​ 在/etc/logstash/conf.d/目录下,添加配置文件

​ 此处超链接为官方文档用以参考

​ Configuring Logstash

​ 本文档中的配置文件仅供参考,请使用ctrl+F寻找logstash-simple.conf

​ 注:在filter中使用正则,注意需要双引号时,将双引号用单引号包起来( ‘ ” ’ )。

Elasticsearch

# download and install the public signing key:
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
sudo apt-get install apt-transport-https
echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-7.x.list
sudo apt-get update && sudo apt-get install elasticsearch
           

Kibana

sudo apt-get update && sudo apt-get install kibana
           

Run ElkStack on Docker

​ 首先假设电脑上已经有docker,且已经安装了docker-compose,如果没有安装docker-compose,参考一下命令。

# Linux 64直接下载编译好的二进制文件
sudo curl -L https://github.com/docker/compose/releases/download/1.24.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
# 给二进制文件可执行权限
sudo chmod +x /usr/local/bin/docker-compose
# 补全命令
curl -L https://raw.githubusercontent.com/docker/compose/1.24.1/contrib/completion/bash/docker-compose > /etc/bash_completion.d/docker-compose
           

​ 我们使用docker-compose来代替命令行启动镜像的方式(docker run --…)。在这里我们使用docker-compose分别启动logstash、elasticsearch、kibana三个镜像,并对其运行条件进行配置。

拉取镜像
docker pull docker.elastic.co/logstash/logstash:7.4.2
docker pull docker.elastic.co/elasticsearch/elasticsearch:7.4.2
docker pull docker.elastic.co/kibana/kibana:7.4.2
           

​ 这是一个漫长的过程,由于elastic镜像源总是连接不稳定。我找到了网上推荐的镜像库,供参考(能供官方的还是使用官方提供的镜像)

# vi /etc/docker/daemon.json 添加以下信息
{
    ...
    "registry-mirrors": [
      "https://dockerhub.azk8s.cn", # Azure中国镜像
      "https://reg-mirror.qiniu.com", # 七牛云加速器
      "https://regisrty.docker-cn.com", # docker国内官方源
      "http://hub-mirror.c.162.com", # 网易镜像
      "https://docker.mirrors.ustc.edu.cn", # 中科大
      "https://cr.console.aliyun.com/" # 阿里镜像
	]
    ...
}
           
配置docker-compose

​ 直接上文档:

version: '3.5'
services:
  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.4.2
    container_name: es01
    environment:
      - discovery.type=single-node
      - bootstrap.memory_lock=true
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - data01:/usr/share/elasticsearch/data
        #- certs: $CERTS_DIR
    ports:
      - 9200:9200
    networks:
      - elastic

  kib01:
    image: docker.elastic.co/kibana/kibana:7.4.2
    container_name: kib01
    ports:
      - 5601:5601
    environment:
      ELASTICSEARCH_URL: http://elasticsearch:9200
      ELASTICSEARCH_HOSTS: http://elasticsearch:9200
    depends_on:
      - elasticsearch
    networks:
      - elastic

  logstash:
    image: docker.elastic.co/logstash/logstash:7.4.2
    container_name: logt
    ports:
      - 127.0.0.1:12201:12201/udp
    environment:
      ES_URL_LOGSTASH: http://elasticsearch:9200
      # 映射logstash的配置文件
    volumes:
      - ./elk_stack/logstash/conf/logstash.yml:/usr/share/logstash/config/logstash.yml
      - ./elk_stack/logstash/conf/logstash-simple.conf:/usr/share/logstash/pipeline/logstash.conf
    depends_on:
      - elasticsearch
    networks:
      - elastic

volumes:
  data01:
    driver: local

networks:
  elastic:
    name: elastic
    driver: bridge
           

​ 注:由于docker-compose高版本将不支持links,故使用networks将ELK设置为统一网段,但并不能代替links所有功能,有需要请参考官方文档

logstash.yml

# 0.0.0.0为官网配置
# http.host: 0.0.0.0
http.host: 127.0.0.1
xpack.monitoring.elasticsearch.hosts:
- http://elasticsearch:9200
xpack.monitoring.enabled: true
           

logstash-simple.conf

input {
  gelf{
    use_udp => true
    port_udp => 12201
    id => "my_plugin_id"
  }
}
filter { } # 因事而异
output {
  stdout { codec => rubydebug }
  elasticsearch {
    hosts => "${ES_URL_LOGSTASH}" # 若logstash做单独使用,而非docker-compose方式,请按该参数所对应的hosts修改
    index => "logstash-%{+yyyy.MM.dd}"
  }
}
           

​ 注:将logstash-simple.conf的input,docker networks,日志发送方发送时的hosts保持一致。

使用

curl http://localhost:9200

检测elasticsearch是否运行成功

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-msoiFDpx-1576634623194)(C:\Users\liuhq\AppData\Roaming\Typora\typora-user-images\image-20191203181503394.png)]

运行docker应用发送日志

此时进入正在运行的容器logt可以看到stdout的输出

docker attach logt
           
使用Kibana查看

–log-driver gelf --log-opt gelf-address=udp://localhost:12201 --network=elastic --name=test001

此时进入正在运行的容器logt可以看到stdout的输出

```bash
docker attach logt
           
使用Kibana查看

打开Elk所在主机的浏览器,输入

localhost:5601

点击右下角Management按钮,在Kibana下点击Index Patterns,Creat index pattern,如果Kibana检测到已经存在Index会自动列出,此时输入与之对应的Index-name-创建Index(在本文档中使用为[email protected])。具体参考官方文档 (创建索引) 和 另一个 官方文档 (检索)。

继续阅读