分布式airflow下的日志中文乱码问题

自闭症网瘾萝莉.ら 提交于 2019-11-25 16:55:13

[toc]

分布式airflow下的日志中文乱码问题

背景

我们的airflow部署方式为分布式的,在主节点上部署了webserver,worker节点部署了worker和日志服务器,并没有将日志写入远程服务器,所以任务的日志是直接写本地磁盘并通过日志服务器传输给webserver进行展示的。在某一次的作业日志查看中发现出现了中文乱码问题。

排查过程

  1. 首先查看日志文件的编码格式,发现确实是utf-8格式
  2. 查看日志内文件内容发现中文显示正常(当时以为见了鬼了)
  3. 通过浏览器观察webserver发送的获取日志的请求,发现请求路径为http://slave1:8793/log/dag_name/task_name/datetime,通过该路径去查看airflow源码,发现cli.py这个文件中一段代码
@flask_app.route('/log/<path:filename>')
    def serve_logs(filename):  # noqa
        log = os.path.expanduser(conf.get('core', 'BASE_LOG_FOLDER'))
        return flask.send_from_directory(
            log,
            filename,
            mimetype="application/json",
            as_attachment=False)

    WORKER_LOG_SERVER_PORT = \
        int(conf.get('celery', 'WORKER_LOG_SERVER_PORT'))
    flask_app.run(
        host='0.0.0.0', port=WORKER_LOG_SERVER_PORT)

该代码中的 flask.send_from_directory 这个方法是传输本地文件的给webserver进行日志展示的

解决办法

修改mimetype为mimetype="application/json;charset=utf-8",重启日志服务器,问题解决

总结

排查过程并不算难,文章写得不好还请各位童鞋谅解,本次中文问题涉及到了修改源码的操作,不得不说老外的东西毕竟是老外的东西,他们在用的时候可能没有这种问题,希望本篇文章对各位有帮助,谢谢!

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!